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.

Respuestas a la pregunta(3)

Su respuesta a la pregunta