struct CommonBase { int m_base; int virt_base_val; int func_base_val; virtual int virt_base() { return virt_base_val; } virtual int virt_common() { return 555; } int func_base() { return func_base_val; } int func_common() { return 777; } }; struct Base1 : CommonBase { int m1 = 22; Base1() { // Give the base functions/members unique values. virt_base_val = 111; func_base_val = 112; m_base = 11; } virtual int virt1() { return 3; } int func1() { return 4; } }; struct Base2 : CommonBase { int m2 = 33; Base2() { // Give the base functions/members unique values. virt_base_val = 121; func_base_val = 122; m_base = 12; } virtual int virt2() { return 5; } int func2() { return 6; } }; struct FinalClass : Base1, Base2 { int m_final = 44; virtual int final_virt() { return 7; } int final_func() { return 8; } virtual int virt_common() { return 444; } int func_common() { return 888; } }; int main() { FinalClass C; // Call functions so they get emitted. C.func1(); C.func2(); C.final_func(); C.func_common(); C.Base1::func_base(); return 0; // break here }