Sobrecarga del operador amigo << para la clase de plantilla
Estoy tratando de sobrecargar al operador << como amigo de una clase de plantilla Par, pero sigo recibiendo una advertencia del compilador que dice:
friend declaration std::ostream& operator<<(ostream& out, Pair<T,U>& v) declares a non template function
para este código:
friend ostream& operator<<(ostream&, Pair<T,U>&);
da una segunda advertencia como recomendación diciendo
if this is not what you intended, make sure the function template has already been declared and add <> after the function name here
Aquí está la definición de la función
template <class T, class U>
ostream& operator<<(ostream& out, Pair<T,U>& v)
{
out << v.val1 << " " << v.val2;
}
Y aquí está toda la clase.
template <class T, class U>
class Pair{
public:
Pair(T v1, U v2) : val1(v1), val2(v2){}
~Pair(){}
Pair& operator=(const Pair&);
friend ostream& operator<<(ostream&, Pair<T,U>&);
private:
T val1;
U val2;
};
No estaba seguro de qué sacar de la advertencia de recomendación, aparte de que tal vez tengo que poner en algún lugar de la declaración de amigo. ¿Alguien sabe la sintaxis adecuada para esto? Gracias.