Estás confundir la idea de parametrizados tipos y parametrizados valores. Un parámetro de plantilla puede ser un tipo o una constante. Por ejemplo:
template <typename T>
struct Foo;
frente ..
template <int N>
struct Foo;
Parece que desea especializarse su plantilla basada en una enumeración constante, en lugar de un tipo. Es decir, que tiene que decir:
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;
}
Además, no se puede hacer referencia a las enumeraciones utilizando el operador de namespace
. Si desea encapsular sus enumeraciones, debe envolverlas en un espacio de nombres:
namespace CompCriteria
{
enum type {ByKey,ByValue,ByeKeyAndValue};
}
gracias, funciona; –