1 struct CommonBase { 2 int m_base; 3 int virt_base_val; 4 int func_base_val; virt_baseCommonBase5 virtual int virt_base() { return virt_base_val; } virt_commonCommonBase6 virtual int virt_common() { return 555; } func_baseCommonBase7 int func_base() { return func_base_val; } func_commonCommonBase8 int func_common() { return 777; } 9 }; 10 11 struct Base1 : CommonBase { 12 int m1 = 22; Base1Base113 Base1() { 14 // Give the base functions/members unique values. 15 virt_base_val = 111; 16 func_base_val = 112; 17 m_base = 11; 18 } virt1Base119 virtual int virt1() { return 3; } func1Base120 int func1() { return 4; } 21 }; 22 23 struct Base2 : CommonBase { 24 int m2 = 33; Base2Base225 Base2() { 26 // Give the base functions/members unique values. 27 virt_base_val = 121; 28 func_base_val = 122; 29 m_base = 12; 30 } virt2Base231 virtual int virt2() { return 5; } func2Base232 int func2() { return 6; } 33 }; 34 35 struct FinalClass : Base1, Base2 { 36 int m_final = 44; final_virtFinalClass37 virtual int final_virt() { return 7; } final_funcFinalClass38 int final_func() { return 8; } virt_commonFinalClass39 virtual int virt_common() { return 444; } func_commonFinalClass40 int func_common() { return 888; } 41 }; 42 main()43int main() { 44 FinalClass C; 45 // Call functions so they get emitted. 46 C.func1(); 47 C.func2(); 48 C.final_func(); 49 C.func_common(); 50 C.Base1::func_base(); 51 return 0; // break here 52 } 53