#include <iostream>
struct Base1 {
virtual void foo() = 0;
};
struct Base2 : virtual Base1 {
void foo() override {
std::cout << "Base2: foo!" << std::endl;
}
};
struct Derived : virtual Base1, Base2 {
};
int main() {
Derived d;
Base1* b1 = &d;
b1->foo();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEJhc2UxIHsKCXZpcnR1YWwgdm9pZCBmb28oKSA9IDA7Cn07CgoKc3RydWN0IEJhc2UyIDogdmlydHVhbCBCYXNlMSB7Cgl2b2lkIGZvbygpIG92ZXJyaWRlIHsKCQlzdGQ6OmNvdXQgPDwgIkJhc2UyOiBmb28hIiA8PCBzdGQ6OmVuZGw7Cgl9Cn07CgpzdHJ1Y3QgRGVyaXZlZCA6IHZpcnR1YWwgQmFzZTEsIEJhc2UyIHsKfTsKCgppbnQgbWFpbigpIHsKCURlcml2ZWQgZDsKCUJhc2UxKiBiMSA9ICZkOwoJYjEtPmZvbygpOwoJcmV0dXJuIDA7Cn0=