template<typename T1, typename T2>
class Bimap {
public:
class Data {
private:
template<typename T> Data& set(T);
template<> Data& set<T1>(typename T1 v) { /*...*/ }
};
};
Eso me da el error:C++: Error de "especialización explícita en el ámbito no-espacio de nombres"
error: explicit specialization in non-namespace scope 'class Bimap<T1, T2>::Data'
entiendo lo que está diciendo el error. ¿Pero por qué no puedo hacer esto? ¿Y cómo puedo solucionarlo?
Merece la pena señalar que algunos compiladores soportarán esto. – Puppy
En C++ no se puede especializar explícitamente una plantilla de miembro sin especializar explícitamente la plantilla de clase adjunta. Lo que estás intentando (es decir, la especialización) es * no posible *. Tienes que usar la sobrecarga. O rediseña todo por completo. MSVC++ es un compilador que permite esto como una extensión. – AnT