#include <iostream>
using namespace std;
struct Base {
virtual void a() = 0;
virtual void b() = 0;
};
struct Impl {
void a() {
std::cout << "a()" << std::endl;
}
void b() {
std::cout << "b()" << std::endl;
}
};
struct Derived : Base, Impl {
void a(){Impl::a();}
void b(){Impl::b();}
};
void foo(Base&& b) {
b.a();
b.b();
}
int main() {
foo(Derived{});
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEJhc2UgewogIHZpcnR1YWwgdm9pZCBhKCkgPSAwOwogIHZpcnR1YWwgdm9pZCBiKCkgPSAwOwp9OwoKc3RydWN0IEltcGwgewogIHZvaWQgYSgpIHsKICAJc3RkOjpjb3V0IDw8ICJhKCkiIDw8IHN0ZDo6ZW5kbDsKICB9CQogIHZvaWQgYigpIHsKICAJc3RkOjpjb3V0IDw8ICJiKCkiIDw8IHN0ZDo6ZW5kbDsKICB9Cn07CgpzdHJ1Y3QgRGVyaXZlZCA6IEJhc2UsIEltcGwgewoJdm9pZCBhKCl7SW1wbDo6YSgpO30KCXZvaWQgYigpe0ltcGw6OmIoKTt9Cn07Cgp2b2lkIGZvbyhCYXNlJiYgYikgewogIGIuYSgpOwogIGIuYigpOwp9CgppbnQgbWFpbigpIHsKCWZvbyhEZXJpdmVke30pOwoJcmV0dXJuIDA7Cn0=