#include <iostream>
#include <type_traits>
template <typename T, typename = T>
struct is_movable : std::false_type {};
template <typename T>
struct is_movable<T, decltype(T(std::declval<std::decay_t<T>>()))> : std::true_type {};
struct NonMovable
{
NonMovable(NonMovable&&) = delete;
};
int main()
{
std::cout << is_movable<int>::value << std::endl;
std::cout << is_movable<NonMovable>::value << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSBUPgpzdHJ1Y3QgaXNfbW92YWJsZSA6IHN0ZDo6ZmFsc2VfdHlwZSB7fTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgaXNfbW92YWJsZTxULCBkZWNsdHlwZShUKHN0ZDo6ZGVjbHZhbDxzdGQ6OmRlY2F5X3Q8VD4+KCkpKT4gOiBzdGQ6OnRydWVfdHlwZSB7fTsKCnN0cnVjdCBOb25Nb3ZhYmxlCnsKCU5vbk1vdmFibGUoTm9uTW92YWJsZSYmKSA9IGRlbGV0ZTsKfTsKCmludCBtYWluKCkKewoJc3RkOjpjb3V0IDw8IGlzX21vdmFibGU8aW50Pjo6dmFsdWUgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3V0IDw8IGlzX21vdmFibGU8Tm9uTW92YWJsZT46OnZhbHVlIDw8IHN0ZDo6ZW5kbDsKCQp9