Можно ли определить, является ли тип перечисляемым типом?

Есть ли черта типа или можно написать черту типаis_scoped_enum<T> такой что:

if T is a scoped enumeration, is_scoped_enum<T>::value is true and if T is any other type, is_scoped_enum<T>::value is false
 Xeo24 мая 2012 г., 20:43
Просто из любопытства, какие практические применения есть для этого?
 James McNellis23 мая 2012 г., 19:18
@Nawaz: enum с областью видимости - это то, чтоenum class вызывается в C ++ 11, да.
 James McNellis24 мая 2012 г., 23:08
@Xeo: я перегружаю побитовые операторы для набора перечисляемых типов.
 Nawaz23 мая 2012 г., 19:17
Отscoped enumВы имели в виду перечисление C ++ 11?

Ответы на вопрос(1)

Решение Вопроса

Я думаю, что тестирование, если это перечислениеand неявно преобразуемый в базовый тип должен делать свое дело.

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> {};
 23 мая 2012 г., 19:42
@JamesMcNellis: Вы правы. Извините за недопонимание. (Я думал оis_convertible делать неявное преобразование.)
 James McNellis23 мая 2012 г., 19:51
Это хорошее решение, за исключением того, что с последним редактированием логика теперь обратная:::value верно, еслиT перечисление с незаданной областью. :-)
 23 мая 2012 г., 19:21
Лучше использоватьstd::underlying_type<T> вместоint,enum class в C ++ 11 может основываться на чем-то не конвертируемом вint.
 James McNellis23 мая 2012 г., 19:33
@KennyTM: какой тип? C ++ 11 "7.2 / 2 состояния"enum-base должен назвать целочисленный тип; & quot; есть ли целочисленный тип, не преобразуемый вint?
 23 мая 2012 г., 19:22
@KennyTM хорошая мысль. Ред.

Ваш ответ на вопрос