2
enum class test : bool { yes=true, no=false };

template< bool ok >
class A {
};

int main(){
A<test::yes> a;
}

为什么编译失败?(g++ 4.7) 由于 C++11 枚举是强类型的,所以我们应该能够使用 bool 枚举作为模板类型的 bool 参数吗?

4

1 回答 1

8

强类型枚举意味着您只能隐式地比较和分配同一枚举类中的值。解决方案是使用非强类型枚举示例:

enum test : bool
{
    yes = true,
    no = false
};
bool x = test::yes; // ok

或者按照 Tom Knapen 的建议:显式转换枚举

enum class test : bool
{
    yes = true,
    no = false
};
bool x = static_cast<bool>(test::yes); // ok
于 2013-06-30T20:31:23.637 回答