https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91080

            Bug ID: 91080
           Summary: [DR 1672] Layout compatibility with multiple empty
                    bases
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mpolacek at gcc dot gnu.org
  Target Milestone: ---

Cf. https://wg21.link/cwg1672

Test (from the clang testsuite):

struct Empty {};
struct A : Empty {};
struct B { Empty e; };
struct C : A { B b; int n; };
struct D : A { int n; B b; };

static_assert(!__is_standard_layout(C), "");
static_assert(__is_standard_layout(D), "");

struct E { B b; int n; };
struct F { int n; B b; };
union G { B b; int n; };
union H { int n; B b; };

struct X {};
template<typename T> struct Y : X, A { T t; };

static_assert(!__is_standard_layout(Y<E>), "");
static_assert(__is_standard_layout(Y<F>), "");
static_assert(!__is_standard_layout(Y<G>), "");
static_assert(!__is_standard_layout(Y<H>), "");
static_assert(!__is_standard_layout(Y<X>), "");

Reply via email to