template struct is_customly_convertible : std::false_type {}; template struct is_customly_convertible()) >> : std::true_type {}; struct NoTriviallyConstructible { NoTriviallyConstructible() = delete; }; struct NoCopyConstructible { NoCopyConstructible(const NoCopyConstructible &other) = delete; NoCopyConstructible &operator=(const NoCopyConstructible &other) = delete; }; template<> struct Convert { int operator()(const NoTriviallyConstructible &a) { return 0; } }; template<> struct Convert { int operator()(const NoCopyConstructible &a) { return 1; } };