| // PR c++/15172 | |
| // { dg-do run } | |
| extern "C" int printf (const char *, ...); | |
| extern "C" void abort (); | |
| struct A { | |
| static A* p; | |
| A() { p = this; } | |
| A(const A&); | |
| ~A() { if (this != p) abort (); } | |
| void print () { } | |
| }; | |
| A* A::p; | |
| struct B { | |
| A a; | |
| }; | |
| B b = { A () }; | |
| struct A2 { | |
| static A2* p; | |
| A2() { p = this; } | |
| A2(const A2&); | |
| ~A2() { if (this != p) abort (); } | |
| void print () { } | |
| }; | |
| A2* A2::p; | |
| struct B2 { | |
| A2 a2; | |
| }; | |
| int main () { | |
| b.a.print (); | |
| { | |
| B2 b2 = { A2() }; | |
| b2.a2.print (); | |
| } | |
| } | |