1 // PR c++/15172 2 // { dg-do run } 3 4 extern "C" int printf (const char *, ...); 5 extern "C" void abort (); 6 7 struct A { 8 static A* p; 9 AA10 A() { p = this; } 11 A(const A&); ~AA12 ~A() { if (this != p) abort (); } printA13 void print () { } 14 }; 15 16 A* A::p; 17 18 struct B { 19 A a; 20 }; 21 22 B b = { A () }; 23 24 struct A2 { 25 static A2* p; 26 A2A227 A2() { p = this; } 28 A2(const A2&); ~A2A229 ~A2() { if (this != p) abort (); } printA230 void print () { } 31 }; 32 33 A2* A2::p; 34 35 struct B2 { 36 A2 a2; 37 }; 38 main()39int main () { 40 b.a.print (); 41 { 42 B2 b2 = { A2() }; 43 b2.a2.print (); 44 } 45 } 46 47