https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53499
--- Comment #3 from Ed Catmur <ed at catmur dot co.uk> --- I believe this also causes gcc to reject (as ambiguous) the example in [temp.func.order]/3: struct A { }; template<class T> struct B { template<class R> int operator*(R&); // #1 }; template<class T, class R> int operator*(T&, R&); // #2 // The declaration of B::operator* is transformed into the equivalent of // template<class R> int operator*(B<A>&, R&); // #1a int main() { A a; B<A> b; b * a; // calls #1a }