#include <iostream>
using namespace std;
struct B {
void f(int && a){
cout << "B::f(int&&) "; }
virtual int f() const {
cout << "B::f() "; return 0;}
};
struct D : B {
virtual void f(int a){
cout << "D::f(int) "; }
virtual int f()const {
cout << "D::f() "; return 0;}
};
struct C : D {
void f(int a) {
cout << "C::f(int) "; }
int f() const {
cout << "C::f() "; return 0;
}
};
int main() {
C c;
D d;
B * p = &d;
D * q = &c;
q -> f(1);
q -> f();
p -> f(2);
p -> f();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCnN0cnVjdCBCIHsKCXZvaWQgZihpbnQgJiYgYSl7CgkJY291dCA8PCAiQjo6ZihpbnQmJikgICI7IH0KCXZpcnR1YWwgaW50IGYoKSBjb25zdCB7CgkJY291dCA8PCAiQjo6ZigpICI7IHJldHVybiAwO30KfTsKc3RydWN0IEQgOiBCIHsKCXZpcnR1YWwgdm9pZCBmKGludCBhKXsKCQljb3V0IDw8ICJEOjpmKGludCkgICI7IH0KCXZpcnR1YWwgaW50IGYoKWNvbnN0ICB7CgkJY291dCA8PCAiRDo6ZigpICI7IHJldHVybiAwO30KfTsKc3RydWN0IEMgOiBEIHsKCXZvaWQgZihpbnQgYSkgIHsKCQljb3V0IDw8ICJDOjpmKGludCkgICI7IH0KCWludCBmKCkgY29uc3QgIHsKCQljb3V0IDw8ICJDOjpmKCkgIjsgIHJldHVybiAwOwoJfQp9OwoKaW50IG1haW4oKSB7CiAgICAgICAgQyBjOwoJICBEIGQ7CgkgIEIgKiBwID0gJmQ7CgkgIEQgKiBxID0gJmM7CgkgIHEgLT4gZigxKTsKCSAgcSAtPiBmKCk7CgkgIHAgLT4gZigyKTsKCSAgcCAtPiBmKCk7CiAgICAgICAgcmV0dXJuIDA7CiAgIH0K