fork download
  1. #include <iostream>
  2.  
  3. struct A { int a; A() { std::cout << "A() " << &a << '\n';} };
  4. struct B { int b; B() { std::cout << "B()\n";} };
  5. struct B2 : virtual B, virtual A { B2() { std::cout << "B2() " << &a << '\n';} };
  6. struct B3 : virtual B, virtual A { B3() { std::cout << "B3() " << &a << '\n';} };
  7. struct B4 : B2, B3 { // these virtuals are unnecessary in this case...
  8. B4() { std::cout << "B4() " << &a << '\n';}
  9. };
  10. struct C : virtual A { C() { std::cout << "C() " << &a << '\n';} };
  11. struct D : B4, C { D() { std::cout << "D() " << &(B4::a) << ' ' << &(C::a) << '\n';} };
  12.  
  13. int main() {
  14. D d;
  15. //std::cout << &((B4*)&d)->a << '\n';
  16. //std::cout << &((B3*)(B4*)&d)->a << '\n';
  17. //std::cout << &((B2*)(B4*)&d)->a << '\n';
  18. //std::cout << &((A*)(B2*)(B4*)&d)->a << '\n';
  19. //std::cout << &((A*)(B3*)(B4*)&d)->a << '\n';
  20. //std::cout << &((C*)&d)->a << '\n';
  21. //std::cout << &((A*)(C*)&d)->a << '\n';
  22. }
  23.  
Success #stdin #stdout 0s 2884KB
stdin
Standard input is empty
stdout
B()
A() 0xbf9b7868
B2() 0xbf9b7868
B3() 0xbf9b7868
B4() 0xbf9b7868
C() 0xbf9b7868
D() 0xbf9b7868 0xbf9b7868