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

Strongly typed enums mean that you can only, implicitly, compare and assign values in the same enum class. The solution is to use a non-strongly typed enum example:

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

Or as suggested by Tom Knapen: explicitly cast the enum

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