#include <iostream>
#include <memory>
using namespace std;
struct Interf {
virtual void test() {cout << "I am Interf" << endl;}
};
struct A {
A(std::unique_ptr<Interf> e) : _e(std::move(e)) {}
std::unique_ptr<Interf> _e;
void test() {_e->test();}
};
struct Impl : public Interf {
void test() {cout << "I am Impl;" << endl;}
};
int main()
{
std::unique_ptr<Interf> b(new Impl);
A a(std::move(b));
a.test();
cout << "fine!" << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgpzdHJ1Y3QgSW50ZXJmIHsKICAgIHZpcnR1YWwgdm9pZCB0ZXN0KCkge2NvdXQgPDwgIkkgYW0gSW50ZXJmIiA8PCBlbmRsO30KfTsKCnN0cnVjdCBBIHsKICAgIEEoc3RkOjp1bmlxdWVfcHRyPEludGVyZj4gZSkgOiBfZShzdGQ6Om1vdmUoZSkpIHt9CgogICAgc3RkOjp1bmlxdWVfcHRyPEludGVyZj4gX2U7CgogICAgdm9pZCB0ZXN0KCkge19lLT50ZXN0KCk7fQoKfTsKCgoKc3RydWN0IEltcGwgOiBwdWJsaWMgSW50ZXJmIHsKICAgIHZvaWQgdGVzdCgpIHtjb3V0IDw8ICJJIGFtIEltcGw7IiA8PCBlbmRsO30KfTsKCgoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJmPiBiKG5ldyBJbXBsKTsKCiAgICBBIGEoc3RkOjptb3ZlKGIpKTsKCiAgICBhLnRlc3QoKTsKCgogICAgY291dCA8PCAiZmluZSEiIDw8IGVuZGw7CiAgICByZXR1cm4gMDsKfQo=