使用bool类型的强枚举(C ++ 11)模板bool参数失败,为什么?

时间:2013-06-30 19:37:16

标签: c++ c++11 enums

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参数吗?

1 个答案:

答案 0 :(得分:7)

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

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