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 : 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. }
  16.  
Success #stdin #stdout 0s 2928KB
stdin
Standard input is empty
stdout
B()
A() 0xbfc52398
B2() 0xbfc52398
B3() 0xbfc52398
B4() 0xbfc52398
A() 0xbfc52390
C() 0xbfc52390
D() 0xbfc52398 0xbfc52390