1e01aa904Sopenharmony_cistruct base 2e01aa904Sopenharmony_ci{ 3e01aa904Sopenharmony_ci enum mode : short { in, out, top, bottom }; 4e01aa904Sopenharmony_ci enum state { pass, fail, unknown }; 5e01aa904Sopenharmony_ci typedef long int_type; 6e01aa904Sopenharmony_ci}; 7e01aa904Sopenharmony_ci 8e01aa904Sopenharmony_cistruct A : public base 9e01aa904Sopenharmony_ci{ 10e01aa904Sopenharmony_ci int_type _M_i; 11e01aa904Sopenharmony_ci int_type _M_n; 12e01aa904Sopenharmony_ci mode _M_type; 13e01aa904Sopenharmony_ci}; 14e01aa904Sopenharmony_ci 15e01aa904Sopenharmony_cistruct C1 : public base 16e01aa904Sopenharmony_ci{ 17e01aa904Sopenharmony_ci mode _M_type; 18e01aa904Sopenharmony_ci}; 19e01aa904Sopenharmony_ci 20e01aa904Sopenharmony_cistruct C2 : virtual public base 21e01aa904Sopenharmony_ci{ 22e01aa904Sopenharmony_ci mode _M_type; 23e01aa904Sopenharmony_ci}; 24e01aa904Sopenharmony_ci 25e01aa904Sopenharmony_cistruct C3 : public base 26e01aa904Sopenharmony_ci{ 27e01aa904Sopenharmony_ci mode _M_type; 28e01aa904Sopenharmony_ci 29e01aa904Sopenharmony_ci virtual ~C3() { }; 30e01aa904Sopenharmony_ci}; 31e01aa904Sopenharmony_ci 32e01aa904Sopenharmony_cistruct C4 : public base 33e01aa904Sopenharmony_ci{ 34e01aa904Sopenharmony_ci mode _M_type; 35e01aa904Sopenharmony_ci 36e01aa904Sopenharmony_ci virtual void foo() = 0; 37e01aa904Sopenharmony_ci}; 38e01aa904Sopenharmony_ci 39e01aa904Sopenharmony_cistruct D1 : public A 40e01aa904Sopenharmony_ci{ 41e01aa904Sopenharmony_ci int_type _M_index; 42e01aa904Sopenharmony_ci int_type* _M_array; 43e01aa904Sopenharmony_ci bool _M_ok; 44e01aa904Sopenharmony_ci}; 45e01aa904Sopenharmony_ci 46e01aa904Sopenharmony_cistruct D2 : public C1 47e01aa904Sopenharmony_ci{ 48e01aa904Sopenharmony_ci state _M_state; 49e01aa904Sopenharmony_ci int_type _M_index; 50e01aa904Sopenharmony_ci int_type* _M_array; 51e01aa904Sopenharmony_ci bool _M_ok; 52e01aa904Sopenharmony_ci}; 53e01aa904Sopenharmony_ci 54e01aa904Sopenharmony_cistruct D3 : public C1 55e01aa904Sopenharmony_ci{ 56e01aa904Sopenharmony_ci int_type _M_index; 57e01aa904Sopenharmony_ci int_type* _M_array; 58e01aa904Sopenharmony_ci}; 59e01aa904Sopenharmony_ci 60e01aa904Sopenharmony_cistruct D2v : virtual public C2 61e01aa904Sopenharmony_ci{ 62e01aa904Sopenharmony_ci state _M_state; 63e01aa904Sopenharmony_ci int_type _M_index; 64e01aa904Sopenharmony_ci int_type* _M_array; 65e01aa904Sopenharmony_ci bool _M_ok; 66e01aa904Sopenharmony_ci}; 67e01aa904Sopenharmony_ci 68e01aa904Sopenharmony_cistruct D3v : virtual public C3 69e01aa904Sopenharmony_ci{ 70e01aa904Sopenharmony_ci int_type _M_index; 71e01aa904Sopenharmony_ci int_type* _M_array; 72e01aa904Sopenharmony_ci}; 73e01aa904Sopenharmony_ci 74e01aa904Sopenharmony_cistruct D4v : public C4 75e01aa904Sopenharmony_ci{ 76e01aa904Sopenharmony_ci int_type _M_index; 77e01aa904Sopenharmony_ci int_type* _M_array; 78e01aa904Sopenharmony_ci 79e01aa904Sopenharmony_ci void foo() { } 80e01aa904Sopenharmony_ci}; 81e01aa904Sopenharmony_ci 82e01aa904Sopenharmony_ciint main() 83e01aa904Sopenharmony_ci{ 84e01aa904Sopenharmony_ci D1 obj1; 85e01aa904Sopenharmony_ci D2 obj2; 86e01aa904Sopenharmony_ci D3 obj3; 87e01aa904Sopenharmony_ci D2v obj2v; 88e01aa904Sopenharmony_ci D3v obj3v; 89e01aa904Sopenharmony_ci D4v obj4v; 90e01aa904Sopenharmony_ci return 0; 91e01aa904Sopenharmony_ci} 92