如何使用static_assert模板枚举类型?(C++ 11)

Sma*_*ess 0 c++ enums c++11

enum PieceType
{
    NoPieceType, Pawn, Knight, Bishop, Rook, Queen, King,
    AllPieces = 0,
    PieceType_N = 8
};

template<PieceType T> Score OutpostEvaluator()
{
    static_assert(T == Bishop || T == Knight); // Doesn't compile.....
}
Run Code Online (Sandbox Code Playgroud)

我想确保模板函数只能用于某些类型的枚举值,Bishop和Knight在我的例子中.std :: is_scalar(),std :: is_enum()和其他类型的支持似乎在我的情况下不起作用.我该如何实现?

R S*_*ahu 7

语法static_assert,来自http://en.cppreference.com/w/cpp/language/static_assert.

static_assert ( bool_constexpr , message );
Run Code Online (Sandbox Code Playgroud)

您需要提供一条消息.就像是:

static_assert(T == Bishop || T == Knight, "Expected Bishop or Knight");
Run Code Online (Sandbox Code Playgroud)