#include <cassert>
struct A { int x;};
struct B : public A {};
struct C : public A {};
struct D : B, C
{
D () {
C::x = 2;
B::x = 3;
assert(static_cast<C&>(*this).x == 2);
assert(static_cast<B&>(*this).x == 3);
assert(&static_cast<C&>(*this).x == &(C::x));
assert(&static_cast<B&>(*this).x == &(B::x));
}
};
int main () { D d; }
I2luY2x1ZGUgPGNhc3NlcnQ+CgpzdHJ1Y3QgQSB7IGludCB4O307CnN0cnVjdCBCIDogcHVibGljIEEge307CnN0cnVjdCBDIDogcHVibGljIEEge307CgpzdHJ1Y3QgRCA6IEIsIEMKewogICAgRCAoKSB7CiAgICAgICAgQzo6eCA9IDI7CiAgICAgICAgQjo6eCA9IDM7CiAgICAgICAgYXNzZXJ0KHN0YXRpY19jYXN0PEMmPigqdGhpcykueCA9PSAyKTsKICAgICAgICBhc3NlcnQoc3RhdGljX2Nhc3Q8QiY+KCp0aGlzKS54ID09IDMpOwogICAgICAgIGFzc2VydCgmc3RhdGljX2Nhc3Q8QyY+KCp0aGlzKS54ID09ICYoQzo6eCkpOwogICAgICAgIGFzc2VydCgmc3RhdGljX2Nhc3Q8QiY+KCp0aGlzKS54ID09ICYoQjo6eCkpOwogICAgfQp9OwoKaW50IG1haW4gKCkgeyBEIGQ7IH0=