In short, you can't do that, even tough it seems a logical choice. Here is why:
If you declare a friend like this: template<typename V> friend T bar<>(Foo<T>& f, V& v);
you actually refer to another function , not the one with two template arguments. If you have for example the type Foo<int>
then your the declaration of friend refferts to the function which has this definition:
template < typename V>
int bar(Foo<int>& f, V& v);
which is a totally different function then:
template <typename U, typename V>
U bar(Foo<U>& f, V& v);