template <class T> class A;
template <class T, class U>
void operator*(A<T>, A<U>);

template <class T>
class A {
    friend void ::operator*(A<T>, A<T>);
    void friends_only();
};

template <class T, class U>
void operator*(A<T> a, A<U>) {
  a.friends_only();
}

int m()
{
    A<int> a;
    A<void> b;
    a*a;
}