Можно ли определить, является ли тип облачным типом перечисления? Есть ли тип типа, или можно написать тип типа is_scoped_enum<T>, чтобы: если T является областью перечисления, is_scoped_enum<T>::value является true и если T - любой другой тип, is_scoped_enum<T>::value - false Ответ 1 Я думаю, что тестирование, если это перечисление, а не неявно конвертируемое в базовый тип, должно делать трюк. template <typename T, bool B = std::is_enum<T>::value> struct is_scoped_enum : std::false_type {}; template <typename T> struct is_scoped_enum<T, true> : std::integral_constant<bool, !std::is_convertible<T, typename std::underlying_type<T>::type>::value> {};
Ответ 1 Я думаю, что тестирование, если это перечисление, а не неявно конвертируемое в базовый тип, должно делать трюк. template <typename T, bool B = std::is_enum<T>::value> struct is_scoped_enum : std::false_type {}; template <typename T> struct is_scoped_enum<T, true> : std::integral_constant<bool, !std::is_convertible<T, typename std::underlying_type<T>::type>::value> {};