#include <iostream>
#include <memory>
using namespace std;
struct A{
virtual void foo()=0;
};
struct B:A{
void foo() { cout<< "A" << endl;};
};
struct C:A{
void foo() { cout<< "C" << endl;};
};
struct enc{
unique_ptr<A> a;
int x;
enc(unique_ptr<A> p): a(std::move(p)), x(0) {
}
};
int main() {
enc c( unique_ptr<A>(new C()) );
c.a->foo();
enc b( unique_ptr<A>(new B()) );
b.a->foo();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEF7Cgl2aXJ0dWFsIHZvaWQgZm9vKCk9MDsKfTsKCnN0cnVjdCBCOkF7Cgl2b2lkIGZvbygpIHsgY291dDw8ICJBIiA8PCBlbmRsO307Cn07CgpzdHJ1Y3QgQzpBewoJdm9pZCBmb28oKSB7IGNvdXQ8PCAiQyIgPDwgZW5kbDt9Owp9OwoKc3RydWN0IGVuY3sKCXVuaXF1ZV9wdHI8QT4gYTsKCWludCB4OwoJZW5jKHVuaXF1ZV9wdHI8QT4gcCk6IGEoc3RkOjptb3ZlKHApKSwgeCgwKSB7Cgl9CgkKfTsKaW50IG1haW4oKSB7CgllbmMgYyggdW5pcXVlX3B0cjxBPihuZXcgQygpKSApOwoJYy5hLT5mb28oKTsKCWVuYyBiKCB1bmlxdWVfcHRyPEE+KG5ldyBCKCkpICk7CgliLmEtPmZvbygpOwoJcmV0dXJuIDA7Cn0=