1 // { dg-do run { target c++14 } } 2 3 struct S { int a; const char* b; int c; int d = b[a]; void *p = this+1; }; 4 constexpr S ss = S(S{ 1, "asdf" }); 5 6 #define SA(X) static_assert ((X),#X) 7 8 SA(ss.a==1); 9 SA(ss.b[0] == 'a' && ss.b[1] == 's' && ss.b[2] == 'd' && ss.b[3] == 'f'); 10 SA(ss.d == 's'); 11 SA(ss.p == &ss+1); 12 13 struct A 14 { 15 struct B { 16 int i; 17 int j = i+1; 18 } b; 19 int a = b.j+1; 20 }; 21 22 extern constexpr A a = { }; 23 SA(a.b.i == 0 && a.b.j == 1 && a.a == 2); 24 f(const A & ar)25int f(const A& ar) { return ar.a; } 26 main()27int main() 28 { 29 S ss2 = { 1, "asdf" }; 30 if (ss2.a != 1 31 || __builtin_strcmp(ss2.b,"asdf") != 0 32 || ss2.c != int() 33 || ss2.d != 's' 34 || ss2.p != &ss2+1) 35 __builtin_abort(); 36 37 A a = {}; 38 int i = f(A{}); 39 if (a.a != 2 || i != 2) 40 __builtin_abort(); 41 } 42