#include <string>
#include <memory>
#include <cassert>
#include <iostream>
class A
{
public:
virtual ~A() = default;
virtual std::string foo() const
{
return "A";
}
};
void testA()
{
A a;
assert(a.foo() == "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() << std::endl;
}
int main() {
// your code goes here
real_code();
return 0;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPGNhc3NlcnQ+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCmNsYXNzIEEKewpwdWJsaWM6CiAgICB2aXJ0dWFsIH5BKCkgPSBkZWZhdWx0OwogICAgdmlydHVhbCBzdGQ6OnN0cmluZyBmb28oKSBjb25zdAogICAgewogICAgICAgIHJldHVybiAiQSI7CiAgICB9Cn07Cgp2b2lkIHRlc3RBKCkKewogICAgQSBhOwogICAgYXNzZXJ0KGEuZm9vKCkgPT0gIkEiKTsKfQoKY2xhc3MgQjogcHVibGljIEEKewpwdWJsaWM6CiAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGZvbygpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuICJCIjsKICAgIH0KfTsKCnZvaWQgdGVzdEIoKQp7CiAgICBCIGI7CiAgICBhc3NlcnQoYi5mb28oKSA9PSAiQiIpOwp9Cgp2b2lkIHJlYWxfY29kZSgpCnsKICAgIHN0ZDo6dW5pcXVlX3B0cjxBPiBwdHIobmV3IEIpOwogICAgc3RkOjpjb3V0IDw8IHB0ci0+Zm9vKCkgPDwgc3RkOjplbmRsOwp9CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCXJlYWxfY29kZSgpOwoJcmV0dXJuIDA7Cn0=