#include <string>
#include <memory>
#include <cassert>
#include <iostream>
class A
{
public:
virtual ~A() = default;
virtual std::string foo(int x) const
{
return "A";
}
};
void testA()
{
A a;
assert(a.foo(10) == "A");
}
class B: public A
{
public:
virtual std::string foo() const
{
return "B";
}
};
void testB()
{
B b;
assert(b.foo() == "B");
}
void real_code()
{
std::unique_ptr<A> ptr(new B);
std::cout << ptr->foo(10) << std::endl;
}
int main() {
// your code goes here
testA();
testB();
real_code();
return 0;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPGNhc3NlcnQ+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCmNsYXNzIEEKewpwdWJsaWM6CiAgICB2aXJ0dWFsIH5BKCkgPSBkZWZhdWx0OwogICAgdmlydHVhbCBzdGQ6OnN0cmluZyBmb28oaW50IHgpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuICJBIjsKICAgIH0KfTsKCnZvaWQgdGVzdEEoKQp7CiAgICBBIGE7CiAgICBhc3NlcnQoYS5mb28oMTApID09ICJBIik7Cn0KCmNsYXNzIEI6IHB1YmxpYyBBCnsKcHVibGljOgogICAgdmlydHVhbCBzdGQ6OnN0cmluZyBmb28oKSBjb25zdAogICAgewogICAgICAgIHJldHVybiAiQiI7CiAgICB9Cn07Cgp2b2lkIHRlc3RCKCkKewogICAgQiBiOwogICAgYXNzZXJ0KGIuZm9vKCkgPT0gIkIiKTsKfQoKdm9pZCByZWFsX2NvZGUoKQp7CiAgICBzdGQ6OnVuaXF1ZV9wdHI8QT4gcHRyKG5ldyBCKTsKICAgIHN0ZDo6Y291dCA8PCBwdHItPmZvbygxMCkgPDwgc3RkOjplbmRsOwp9CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCXRlc3RBKCk7Cgl0ZXN0QigpOwoJcmVhbF9jb2RlKCk7CglyZXR1cm4gMDsKfQ==