Подтвердить что ты не робот

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

Есть ли тип типа, или можно написать тип типа is_scoped_enum<T>, чтобы:

  • если T является областью перечисления, is_scoped_enum<T>::value является true и
  • если T - любой другой тип, is_scoped_enum<T>::value - false
4b9b3361

Ответ 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> {};