#include <iostream>
using namespace std;
struct Base { virtual~Base() {} };
struct Der1 : public virtual Base { int F1; };
struct Der2 : public virtual Base { int F2[2]; };
struct Der3 : public virtual Base { int F3[3]; };
struct Der4 : public virtual Base { int F4[4]; };
struct Der5 : public virtual Base { int F5[5]; };
struct DerAll_1 : Der1, Der2, Der3, Der4, Der5 { int F; };
struct DerAll_2 : Der5, Der4, Der3, Der2, Der1 { int F; };
Base* toBase( Der2* p ) { return static_cast<Base*>( p ); }
int main()
{
delete toBase( new Der2 );
delete toBase( new DerAll_1 );
delete toBase( new DerAll_2 );
toBase( (DerAll_1*)17 );
cout << "OK!!!" << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEJhc2UgeyB2aXJ0dWFsfkJhc2UoKSB7fSB9OwoKc3RydWN0IERlcjEgOiBwdWJsaWMgdmlydHVhbCBCYXNlIHsgaW50IEYxOyB9OwoKc3RydWN0IERlcjIgOiBwdWJsaWMgdmlydHVhbCBCYXNlIHsgaW50IEYyWzJdOyB9OwoKc3RydWN0IERlcjMgOiBwdWJsaWMgdmlydHVhbCBCYXNlIHsgaW50IEYzWzNdOyB9OwoKc3RydWN0IERlcjQgOiBwdWJsaWMgdmlydHVhbCBCYXNlIHsgaW50IEY0WzRdOyB9OwoKc3RydWN0IERlcjUgOiBwdWJsaWMgdmlydHVhbCBCYXNlIHsgaW50IEY1WzVdOyB9OwoKc3RydWN0IERlckFsbF8xIDogRGVyMSwgRGVyMiwgRGVyMywgRGVyNCwgRGVyNSB7IGludCBGOyB9OwoKc3RydWN0IERlckFsbF8yIDogRGVyNSwgRGVyNCwgRGVyMywgRGVyMiwgRGVyMSB7IGludCBGOyB9OwoKIAoKQmFzZSogdG9CYXNlKCBEZXIyKiBwICkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZSo+KCBwICk7IH0KCiAKCiAKCmludCBtYWluKCkKCnsKCiAgICBkZWxldGUgdG9CYXNlKCBuZXcgRGVyMiApOwoKICAgIGRlbGV0ZSB0b0Jhc2UoIG5ldyBEZXJBbGxfMSApOwoKICAgIGRlbGV0ZSB0b0Jhc2UoIG5ldyBEZXJBbGxfMiApOwoKCgogICAgdG9CYXNlKCAoRGVyQWxsXzEqKTE3ICk7CgogICAgY291dCA8PCAiT0shISEiIDw8IGVuZGw7CgoJcmV0dXJuIDA7Cgp9IAoK