#include <utility>
template < class T>
struct movable {
movable( ) noexcept = default ;
~movable( ) noexcept { ( void ) sizeof ( T) ; }
movable( const movable& ) noexcept = delete ;
movable( movable && ) noexcept = default ;
} ;
template < class T>
class wrapper {
public :
movable< T> m;
wrapper( ) noexcept = default ;
wrapper( wrapper && ) noexcept = default ;
~wrapper( ) ;
} ;
struct incomplete;
int main( ) {
wrapper< incomplete> original;
wrapper< incomplete> copy( std:: move ( original) ) ;
}
I2luY2x1ZGUgPHV0aWxpdHk+Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpzdHJ1Y3QgbW92YWJsZSB7CiAgICBtb3ZhYmxlKCkgbm9leGNlcHQgPSBkZWZhdWx0OwogICAgfm1vdmFibGUoKSBub2V4Y2VwdCB7ICh2b2lkKSBzaXplb2YoVCk7IH0KICAgIG1vdmFibGUoY29uc3QgbW92YWJsZSYpIG5vZXhjZXB0ID0gZGVsZXRlOwogICAgbW92YWJsZShtb3ZhYmxlICYmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyB3cmFwcGVyIHsKcHVibGljOgogICAgbW92YWJsZTxUPiBtOwogICAgd3JhcHBlcigpIG5vZXhjZXB0ID0gZGVmYXVsdDsKICAgIHdyYXBwZXIod3JhcHBlciAmJikgbm9leGNlcHQgPSBkZWZhdWx0OwogICAgfndyYXBwZXIoKTsKfTsKCnN0cnVjdCBpbmNvbXBsZXRlOwoKaW50IG1haW4oKSB7CiAgICB3cmFwcGVyPGluY29tcGxldGU+IG9yaWdpbmFsOwogICAgd3JhcHBlcjxpbmNvbXBsZXRlPiBjb3B5KHN0ZDo6bW92ZShvcmlnaW5hbCkpOwp9Cg==