- #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=