#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEEgeyBpbnQgYTsgQSgpIHsgc3RkOjpjb3V0IDw8ICJBKCkgIiA8PCAmYSA8PCAnXG4nO30gfTsKc3RydWN0IEIgeyBpbnQgYjsgQigpIHsgc3RkOjpjb3V0IDw8ICJCKClcbiI7fSB9OwpzdHJ1Y3QgQjIgOiB2aXJ0dWFsIEIsIHZpcnR1YWwgQSB7IEIyKCkgeyBzdGQ6OmNvdXQgPDwgIkIyKCkgIiA8PCAmYSA8PCAnXG4nO30gfTsKc3RydWN0IEIzIDogdmlydHVhbCBCLCB2aXJ0dWFsIEEgeyBCMygpIHsgc3RkOjpjb3V0IDw8ICJCMygpICIgPDwgJmEgPDwgJ1xuJzt9IH07CnN0cnVjdCBCNCA6IEIyLCBCMyB7ICAvLyB0aGVzZSB2aXJ0dWFscyBhcmUgdW5uZWNlc3NhcnkgaW4gdGhpcyBjYXNlLi4uCiAgICBCNCgpIHsgc3RkOjpjb3V0IDw8ICJCNCgpICIgPDwgJmEgPDwgJ1xuJzt9Cn07CnN0cnVjdCBDIDogQSB7IEMoKSB7IHN0ZDo6Y291dCA8PCAiQygpICIgPDwgJmEgPDwgJ1xuJzt9IH07CnN0cnVjdCBEIDogQjQsIEMgeyBEKCkgeyBzdGQ6OmNvdXQgPDwgIkQoKSAiIDw8ICYoQjQ6OmEpIDw8ICcgJyA8PCAmKEM6OmEpIDw8ICdcbic7fSB9OwoKaW50IG1haW4oKSB7CiAgICBEIGQ7Cn0K