#include <iostream>
struct Top {
int value;
Top(int val) : value(val) {}
int get() {
return value;
}
};
struct Mid1 : Top {
Mid1() : Top(3) {}
int get() {
return 1;
}
};
struct Mid2 : Top {
Mid2() : Top(4) {}
int get() {
return 2;
}
};
struct Bottom : Mid1, Mid2 {
};
int main() {
Bottom b;
std::cout << b.Mid1::get() << std::endl;
std::cout << b.Mid2::get() << std::endl;
//std::cout << b.Top::get() << std::endl; // ERROR
//std::cout << b.Mid1::Top::get() << std::endl; // ERROR
//std::cout << b.Mid2::Top::get() << std::endl; // ERROR
std::cout << static_cast<Mid1&>(b).Top::get() << std::endl; // OK
std::cout << static_cast<Mid2&>(b).Top::get() << std::endl; // OK
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IFRvcCB7CiAgICBpbnQgdmFsdWU7CiAgICBUb3AoaW50IHZhbCkgOiB2YWx1ZSh2YWwpIHt9CiAgICBpbnQgZ2V0KCkgewogICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KfTsKCnN0cnVjdCBNaWQxIDogVG9wIHsKICAgIE1pZDEoKSA6IFRvcCgzKSB7fQogICAgaW50IGdldCgpIHsKICAgICAgICByZXR1cm4gMTsKICAgIH0KfTsKCnN0cnVjdCBNaWQyIDogVG9wIHsKICAgIE1pZDIoKSA6IFRvcCg0KSB7fQogICAgaW50IGdldCgpIHsKICAgICAgICByZXR1cm4gMjsKICAgIH0KfTsKCnN0cnVjdCBCb3R0b20gOiBNaWQxLCBNaWQyIHsKfTsKCmludCBtYWluKCkgewogICAgQm90dG9tIGI7CiAgICBzdGQ6OmNvdXQgPDwgYi5NaWQxOjpnZXQoKSA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgYi5NaWQyOjpnZXQoKSA8PCBzdGQ6OmVuZGw7CiAgICAvL3N0ZDo6Y291dCA8PCBiLlRvcDo6Z2V0KCkgPDwgc3RkOjplbmRsOyAvLyBFUlJPUgogICAgLy9zdGQ6OmNvdXQgPDwgYi5NaWQxOjpUb3A6OmdldCgpIDw8IHN0ZDo6ZW5kbDsgLy8gRVJST1IKICAgIC8vc3RkOjpjb3V0IDw8IGIuTWlkMjo6VG9wOjpnZXQoKSA8PCBzdGQ6OmVuZGw7IC8vIEVSUk9SCiAgICBzdGQ6OmNvdXQgPDwgc3RhdGljX2Nhc3Q8TWlkMSY+KGIpLlRvcDo6Z2V0KCkgPDwgc3RkOjplbmRsOyAvLyBPSwogICAgc3RkOjpjb3V0IDw8IHN0YXRpY19jYXN0PE1pZDImPihiKS5Ub3A6OmdldCgpIDw8IHN0ZDo6ZW5kbDsgLy8gT0sKICAgIHJldHVybiAwOwp9