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

ali*_*ali 2 c++ enums c++11

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

template< bool ok >
class A {
};

int main(){
A<test::yes> a;
}
Run Code Online (Sandbox Code Playgroud)

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

a.l*_*ram 7

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

enum test : bool
{
    yes = true,
    no = false
};
bool x = test::yes; // ok
Run Code Online (Sandbox Code Playgroud)

或者像Tom Knapen所建议的那样:明确地演绎了枚举

enum class test : bool
{
    yes = true,
    no = false
};
bool x = static_cast<bool>(test::yes); // ok
Run Code Online (Sandbox Code Playgroud)