// P0466R5 // { dg-do compile { target c++20 } } namespace std { template struct integral_constant { static constexpr T value = v; }; template struct is_layout_compatible; template struct is_layout_compatible : public integral_constant { }; template inline constexpr bool is_layout_compatible_v = __is_layout_compatible (T, U); } struct A { int a; char b; }; struct B { const int c; volatile char d; }; struct C { int a : 1; int : 7; int : 0; int b : 2; }; struct D { int : 1; int c : 7; int : 0; int : 2; }; struct E { int f : 1; int : 7; int g : 2; }; struct F { int a; signed char b; }; union G { int a; long long b; signed char c; unsigned char d; int e; }; union H { long long f; unsigned char g; int h; int i; signed char j; }; struct I : public A {}; struct J {}; struct K : public J {}; struct L {}; struct M : public K, L { const int a; volatile char b; }; struct N {}; struct O : public N, M {}; struct P { int a; private: int b; public: int c; }; struct Q { int a; private: int b; public: int c; }; union U1 { int a; private: int b; public: int c; }; union U2 { int a; private: int b; public: int c; }; struct S {}; struct T {}; struct W; struct X; enum E1 : int { E11, E12 }; enum E2 : int { E21, E22 }; enum E3 : long { E31, E32 }; enum E4 { E41, E42 }; enum E5 { E51, E52 }; static_assert (std::is_layout_compatible::value); static_assert (std::is_layout_compatible_v); static_assert (std::is_layout_compatible_v); static_assert (std::is_layout_compatible_v); static_assert (!std::is_layout_compatible_v); static_assert (!std::is_layout_compatible_v); static_assert (std::is_layout_compatible_v); static_assert (std::is_layout_compatible_v); static_assert (std::is_layout_compatible_v); static_assert (std::is_layout_compatible_v); static_assert (!std::is_layout_compatible_v); static_assert (std::is_layout_compatible_v); static_assert (!std::is_layout_compatible_v); static_assert (!std::is_layout_compatible_v); static_assert (std::is_layout_compatible_v); static_assert (std::is_layout_compatible_v); static_assert (std::is_layout_compatible_v); static_assert (std::is_layout_compatible_v); static_assert (std::is_layout_compatible_v); static_assert (std::is_layout_compatible_v); static_assert (std::is_layout_compatible_v); static_assert (!std::is_layout_compatible_v); static_assert (std::is_layout_compatible_v); static_assert (!std::is_layout_compatible_v); static_assert (std::is_layout_compatible_v); static_assert (!std::is_layout_compatible_v); static_assert (std::is_layout_compatible_v);