La surcharge ami de l'opérateur << pour la classe de modèle

Je suis en train de la surcharge de l'opérateur << comme un ami à un modèle de classe Paire, mais je reçois un message d'avertissement du compilateur disant

friend declaration std::ostream& operator<<(ostream& out, Pair<T,U>& v) declares a non template function

pour ce code:

friend ostream& operator<<(ostream&, Pair<T,U>&);

il donne un second avertissement comme une recommandation en disant

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

Ici est la définition de la fonction

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

et ici, c'est l'ensemble de la classe.

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

Je n'étais pas sûr de ce que pour tirer de la recommandation d'avertissement, d'autres que j'ai peut-être mettre quelque part dans l'ami de la déclaration. Personne ne sait la syntaxe correcte pour cela? Merci.

InformationsquelleAutor trikker | 2009-08-19