// Special g++ Options: -fvtable-thunks int state; int fail; class A { public: A() { if (++state != 1) fail = 1; } virtual int foo() { if (++state != 2) fail = 1; } virtual ~A() { if (++state != 3) fail = 1; } }; A* bar() { return new A; } main() { A *aptr = bar(); aptr->foo(); if (dynamic_cast (aptr) != aptr) fail = 1; delete aptr; if (++state != 4) fail = 1; return fail; }