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 列挙型を使用できるはずですか?
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