有没有办法确保模板参数是枚举类型?
我知道type_traits有std::is_enum,但我不希望它匹配常规枚举,只是enum_classes.
想要效果的示例:
enum class EnumClass {};
enum Enum {};
class Class {};
template <typename T>
void Example()
{
static_assert(/* T is EnumClass */, "`T` must be an enum class");
}
Example<EnumClass>(); // Ok
Example<Enum>(); // Error
Example<Class>(); // Error
Run Code Online (Sandbox Code Playgroud)
我使用的是C++ 11,不幸的是不能再高了(虽然我很想知道解决方案,即使它涉及更新的标准).
可能吗?
是否有类型特征,或者是否可以编写类型特征is_scoped_enum<T>,使得:
T是一个范围枚举,is_scoped_enum<T>::value是true和T是任何其他类型,is_scoped_enum<T>::value则为false