#include class MyType { public: MyType() {} MyType(MyType&& other) { fprintf(stderr, "move ctor\n"); } // Copy constructor is implicitly deleted. // MyType(const MyType& other) = delete; }; int main(int argc, char** argv) { MyType type; // |type| is an lvalue, so this will not compile because move constructor's // argument will only bind to rvalues. MyType other_type = type; }