// PR c++/43120 | |
// { dg-do run } | |
extern "C" void abort (); | |
struct A { | |
int a; | |
A(int a_) : a(a_) {} | |
A(const A &other) { } | |
virtual void dummy() {} | |
}; | |
struct B { | |
virtual B *clone() const = 0; | |
}; | |
struct C : public virtual B { | |
virtual C *clone() const = 0; | |
}; | |
struct E* ep; | |
struct E : public A, public C { | |
E(int a_) : A(a_) { ep = this; } | |
virtual E *clone() const { | |
if (this != ep) | |
abort(); | |
return 0; | |
} | |
}; | |
int main() { | |
E *a = new E(123); | |
C *c = a; | |
B *b = a; | |
c->clone(); | |
b->clone(); | |
delete a; | |
return 0; | |
} |