#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;
}