#include <iostream>

struct A { int a; A() { std::cout << "A() " << &a << '\n';} };
struct B { int b; B() { std::cout << "B()\n";} };
struct B2 : virtual B, virtual A { B2() { std::cout << "B2() " << &a << '\n';} };
struct B3 : virtual B, virtual A { B3() { std::cout << "B3() " << &a << '\n';} };
struct B4 : B2, B3 {  // these virtuals are unnecessary in this case...
    B4() { std::cout << "B4() " << &a << '\n';}
};
struct C : A { C() { std::cout << "C() " << &a << '\n';} };
struct D : B4, C { D() { std::cout << "D() " << &(B4::a) << ' ' << &(C::a) << '\n';} };

int main() {
    D d;
}
