1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
// Origin: Mark Mitchell <mark@codesourcery.com> extern "C" void abort(); extern "C" void printf(const char*, ...); int i; struct A; struct A* as[10]; struct A { A () { as[i++] = this; } A (const A&) { as[i++] = this; } ~A() { if (i == 0 || as[--i] != this) abort(); } }; A f() { return A(); } int main () { A a (f ()); }