struct Base { virtual~Base() {} };
struct Der1 : public virtual Base { int F1; };
struct Der2 : public virtual Base { int F2; };
struct Der3 : Der1, Der2 { int F3; };
Base* toBase( Der2* p ) { return p; }
int main()
{
delete toBase( new Der2 );
delete toBase( new Der3 );
return 0;
}
c3RydWN0IEJhc2UgeyB2aXJ0dWFsfkJhc2UoKSB7fSB9OwpzdHJ1Y3QgRGVyMSA6IHB1YmxpYyB2aXJ0dWFsIEJhc2UgeyBpbnQgRjE7IH07CnN0cnVjdCBEZXIyIDogcHVibGljIHZpcnR1YWwgQmFzZSB7IGludCBGMjsgfTsKc3RydWN0IERlcjMgOiBEZXIxLCBEZXIyIHsgaW50IEYzOyB9OwoKQmFzZSogdG9CYXNlKCBEZXIyKiBwICkgeyByZXR1cm4gcDsgfQoKCmludCBtYWluKCkKewogICAgZGVsZXRlIHRvQmFzZSggbmV3IERlcjIgKTsKICAgIGRlbGV0ZSB0b0Jhc2UoIG5ldyBEZXIzICk7CgogICAgcmV0dXJuIDA7Cn0=