class CBase1 size(8):
+---
0 | {vfptr}
4 | a1
+---
CBase1::$vftable@:
| &CBase1_meta
| 0
0 | &CBase1::foo1
CBase1::foo1 this adjustor: 0
class CBase2 size(20):
+---
0 | {vfptr}
4 | {vbptr}
8 | a2
+---
+--- (virtual base CBase1)
12 | {vfptr}
16 | a1
+---
CBase2::$vftable@CBase2@:
| &CBase2_meta
| 0
0 | &CBase2::foo2
CBase2::$vbtable@:
0 | -4
1 | 8 (CBase2d(CBase2+4)CBase1)
CBase2::$vftable@CBase1@:
| -12
0 | &CBase1::foo1
CBase2::foo2 this adjustor: 0
vbi: class offset o.vbptr o.vbte fVtorDisp
CBase1 12 4 4 0
class CBase3 size(20):
+---
0 | {vfptr}
4 | {vbptr}
8 | a3
+---
+--- (virtual base CBase1)
12 | {vfptr}
16 | a1
+---
CBase3::$vftable@CBase3@:
| &CBase3_meta
| 0
0 | &CBase3::foo3
CBase3::$vbtable@:
0 | -4
1 | 8 (CBase3d(CBase3+4)CBase1)
CBase3::$vftable@CBase1@:
| -12
0 | &CBase1::foo1
CBase3::foo3 this adjustor: 0
vbi: class offset o.vbptr o.vbte fVtorDisp
CBase1 12 4 4 0
class CBase4 size(12):
+---
| +--- (base class CBase1)
0 | | {vfptr}
4 | | a1
| +---
8 | a4
+---
CBase4::$vftable@:
| &CBase4_meta
| 0
0 | &CBase1::foo1
1 | &CBase4::foo4
CBase4::foo4 this adjustor: 0
class CDerive size(48):
+---
| +--- (base class CBase2)
0 | | {vfptr}
4 | | {vbptr}
8 | | a2
| +---
| +--- (base class CBase3)
12 | | {vfptr}
16 | | {vbptr}
20 | | a3
| +---
| +--- (base class CBase4)
| | +--- (base class CBase1)
24 | | | {vfptr}
28 | | | a1
| | +---
32 | | a4
| +---
36 | b
+---
+--- (virtual base CBase1)
40 | {vfptr}
44 | a1
+---
CDerive::$vftable@CBase2@:
| &CDerive_meta
| 0
0 | &CBase2::foo2
1 | &CDerive::bar
CDerive::$vftable@CBase3@:
| -12
0 | &CBase3::foo3
CDerive::$vftable@:
| -24
0 | &CBase1::foo1
1 | &CBase4::foo4
CDerive::$vbtable@CBase2@:
0 | -4
1 | 36 (CDerived(CBase2+4)CBase1)
CDerive::$vbtable@CBase3@:
0 | -4
1 | 24 (CDerived(CBase3+4)CBase1)
CDerive::$vftable@CBase1@:
| -40
0 | &CBase1::foo1
CDerive::func5 this adjustor: 0
vbi: class offset o.vbptr o.vbte fVtorDisp
CBase1 40 4 4 0