Перегрузка оператора друга << для шаблона класса

Я пытаюсь перегрузить оператор << как друга для шаблона класса Pair, но я получаю предупреждение компилятора, говорящее

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

для этого кода:

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

это дает второе предупреждение в качестве рекомендации, говоря

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

Вот определение функции

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

и вот весь класс.

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

Я не был уверен, что следует извлечь из предупреждения с рекомендациями, кроме того, что, возможно, мне придется указать что-то в объявлении друга. Кто-нибудь знает правильный синтаксис для этого? Благодарю.

Ответы на вопрос(3)

Ваш ответ на вопрос