#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 : virtual A { C() { std::cout << "C() " << &a << '\n';} };
struct D : B4, C { D() { std::cout << "D() " << &(B4::a) << ' ' << &(C::a) << '\n';} };
int main() {
D d;
//std::cout << &((B4*)&d)->a << '\n';
//std::cout << &((B3*)(B4*)&d)->a << '\n';
//std::cout << &((B2*)(B4*)&d)->a << '\n';
//std::cout << &((A*)(B2*)(B4*)&d)->a << '\n';
//std::cout << &((A*)(B3*)(B4*)&d)->a << '\n';
//std::cout << &((C*)&d)->a << '\n';
//std::cout << &((A*)(C*)&d)->a << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEEgeyBpbnQgYTsgQSgpIHsgc3RkOjpjb3V0IDw8ICJBKCkgIiA8PCAmYSA8PCAnXG4nO30gfTsKc3RydWN0IEIgeyBpbnQgYjsgQigpIHsgc3RkOjpjb3V0IDw8ICJCKClcbiI7fSB9OwpzdHJ1Y3QgQjIgOiB2aXJ0dWFsIEIsIHZpcnR1YWwgQSB7IEIyKCkgeyBzdGQ6OmNvdXQgPDwgIkIyKCkgIiA8PCAmYSA8PCAnXG4nO30gfTsKc3RydWN0IEIzIDogdmlydHVhbCBCLCB2aXJ0dWFsIEEgeyBCMygpIHsgc3RkOjpjb3V0IDw8ICJCMygpICIgPDwgJmEgPDwgJ1xuJzt9IH07CnN0cnVjdCBCNCA6IEIyLCBCMyB7ICAvLyB0aGVzZSB2aXJ0dWFscyBhcmUgdW5uZWNlc3NhcnkgaW4gdGhpcyBjYXNlLi4uCiAgICBCNCgpIHsgc3RkOjpjb3V0IDw8ICJCNCgpICIgPDwgJmEgPDwgJ1xuJzt9Cn07CnN0cnVjdCBDIDogdmlydHVhbCBBIHsgQygpIHsgc3RkOjpjb3V0IDw8ICJDKCkgIiA8PCAmYSA8PCAnXG4nO30gfTsKc3RydWN0IEQgOiBCNCwgQyB7IEQoKSB7IHN0ZDo6Y291dCA8PCAiRCgpICIgPDwgJihCNDo6YSkgPDwgJyAnIDw8ICYoQzo6YSkgPDwgJ1xuJzt9IH07CgppbnQgbWFpbigpIHsKICAgIEQgZDsKICAgIC8vc3RkOjpjb3V0IDw8ICYoKEI0KikmZCktPmEgPDwgJ1xuJzsKICAgIC8vc3RkOjpjb3V0IDw8ICYoKEIzKikoQjQqKSZkKS0+YSA8PCAnXG4nOwogICAgLy9zdGQ6OmNvdXQgPDwgJigoQjIqKShCNCopJmQpLT5hIDw8ICdcbic7CiAgICAvL3N0ZDo6Y291dCA8PCAmKChBKikoQjIqKShCNCopJmQpLT5hIDw8ICdcbic7CiAgICAvL3N0ZDo6Y291dCA8PCAmKChBKikoQjMqKShCNCopJmQpLT5hIDw8ICdcbic7CiAgICAvL3N0ZDo6Y291dCA8PCAmKChDKikmZCktPmEgPDwgJ1xuJzsKICAgIC8vc3RkOjpjb3V0IDw8ICYoKEEqKShDKikmZCktPmEgPDwgJ1xuJzsKfQo=