在语言中添加enum class 的全部目的是使枚举强类型和作用域。这意味着:
所以你必须这样做:
static_assert(to_integral(MyEnum::A)== 0 && to_integral(MyEnum::B)==1,
"your message");
并从this answer 中获取to_integral 的实现:它是一个通用实现,因此您不必假设或弄清楚MyEnum 的底层类型是什么。
或者,您可以为MyEnum 定义operator==。确保它是constexpr:
constexpr bool operator==(MyEnum x, int y) { return to_integral(x) == y; }
constexpr bool operator==(int x, MyEnum y) { return y == x; }
现在你可以这样写了:
static_assert(MyEnum::A== 0 && MyEnum::B ==1, "your message");
为了完整起见,我从my other answer复制粘贴to_integral的实现:
#include <type_traits> //must include it
template<typename E>
constexpr auto to_integral(E e) -> typename std::underlying_type<E>::type
{
return static_cast<typename std::underlying_type<E>::type>(e);
}
希望对您有所帮助。