Sobrecarregando amigo operador << para a classe de modelo

Eu estou tentando sobrecarregar o operador << como um amigo para uma classe de modelo par, mas eu continuo recebendo um aviso de compilador dizendo

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>&);

dá um segundo aviso como uma recomendação dizendo

if this is not what you intended, make sure the function template has already been declared and add <> after the function name here

Aqui está a definição da função

template <class T, class U>
ostream& operator<<(ostream& out, Pair<T,U>& v)
{
    out << v.val1 << " " << v.val2;
}

e aqui está a turma toda.

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;
};

Eu não tinha certeza do que tirar do aviso de recomendação, além disso, talvez eu tenha que colocar em algum lugar na declaração de amizade. Alguém sabe a sintaxe adequada para isso? Obrigado.

questionAnswers(3)

yourAnswerToTheQuestion