是否有类型特征,或者是否可以编写类型特征is_scoped_enum<T>
,以便:
T
是带范围的枚举,则is_scoped_enum<T>::value
为true
并且T
是任何其他类型,则is_scoped_enum<T>::value
为false 答案 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> {};