| 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 |
| } |