Вы приравнивая идею параметризованных типов и параметризованных значений. Параметром шаблона может быть тип или константа. Например:
template <typename T>
struct Foo;
против ..
template <int N>
struct Foo;
Похоже, что вы хотите специализироваться шаблон на основе перечисления постоянной, а не типа. Значение, вы должны сказать:
enum CompCriteria{ByKey,ByValue,ByeKeyAndValue};
template<CompCriteria>
struct X;
// Specialization for ByKeyAndValue
//
template<>
struct X<ByeKeyAndValue>
{
};
int main()
{
X<ByeKeyAndValue> x; // instantiate specialization
return 0;
}
Кроме того, вы не можете обратиться к перечислениям с помощью оператора namespace
. Если вы хотите инкапсулировать свои перечисления, вам необходимо обернуть их в пространство имен:
namespace CompCriteria
{
enum type {ByKey,ByValue,ByeKeyAndValue};
}
спасибо, это работает; –