fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct Base { virtual~Base() {} };
  5.  
  6. struct Der1 : public virtual Base { int F1; };
  7.  
  8. struct Der2 : public virtual Base { int F2[2]; };
  9.  
  10. struct Der3 : public virtual Base { int F3[3]; };
  11.  
  12. struct Der4 : public virtual Base { int F4[4]; };
  13.  
  14. struct Der5 : public virtual Base { int F5[5]; };
  15.  
  16. struct DerAll_1 : Der1, Der2, Der3, Der4, Der5 { int F; };
  17.  
  18. struct DerAll_2 : Der5, Der4, Der3, Der2, Der1 { int F; };
  19.  
  20.  
  21.  
  22. Base* toBase( Der2* p ) { return static_cast<Base*>( p ); }
  23.  
  24.  
  25.  
  26.  
  27.  
  28. int main()
  29.  
  30. {
  31.  
  32. delete toBase( new Der2 );
  33.  
  34. delete toBase( new DerAll_1 );
  35.  
  36. delete toBase( new DerAll_2 );
  37.  
  38.  
  39.  
  40. toBase( (DerAll_1*)17 );
  41.  
  42. cout << "OK!!!" << endl;
  43.  
  44. return 0;
  45.  
  46. }
  47.  
  48.  
Success #stdin #stdout 0s 3032KB
stdin
Standard input is empty
stdout
OK!!!