| // { dg-do run } | |
| extern "C" void abort(); | |
| int ic; | |
| struct X | |
| { | |
| X() { ++ic; } | |
| X( const X & ) { ++ic; } | |
| ~X() { if (--ic < 0) abort(); } | |
| }; | |
| struct V | |
| { | |
| virtual ~V() {} | |
| }; | |
| struct A : public virtual V | |
| { | |
| }; | |
| struct B : public virtual V | |
| { | |
| virtual void foo( X ) = 0; | |
| }; | |
| struct D : public A, public virtual B | |
| { | |
| virtual void foo( X ) {} | |
| }; | |
| int main() | |
| { | |
| B *b = new D; | |
| b->foo( X() ); | |
| } |