是否可以确定类型是否为范围枚举类型?

时间:2012-05-23 17:15:31

标签: c++ enums c++11 metaprogramming typetraits

是否有类型特征,或者是否可以编写类型特征is_scoped_enum<T>,以便:

  • 如果T是带范围的枚举,则is_scoped_enum<T>::valuetrue并且
  • 如果T是任何其他类型,则is_scoped_enum<T>::value为false

1 个答案:

答案 0 :(得分:25)

我认为测试枚举是否可以隐式转换为基础类型应该可以解决问题。

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> {};