// { 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() ); | |
} |