Überladen des Friend-Operators << für die Template-Klasse

Ich versuche, den Operator << als Freund einer Template-Klasse Pair zu überladen, bekomme aber immer wieder eine Compiler-Warnung

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

für diesen Code:

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

es gibt eine zweite Warnung als Empfehlung, die besagt

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

Hier ist die Funktionsdefinition

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

und hier ist die ganze Klasse.

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

Ich war mir nicht sicher, was ich aus der Empfehlungswarnung ziehen sollte, ansonsten muss ich vielleicht irgendwo in die Freundeserklärung schreiben. Kennt jemand die richtige Syntax dafür? Vielen Dank.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage