http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55136
Bug #: 55136 Summary: template class member template explicit instanciation fails if non template overload exists Classification: Unclassified Product: gcc Version: 4.7.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: frrr...@gmail.com this code: template <typename T1> struct A { void f(int) {} template<typename T2> void f(T2) {} }; template void A<int>::f<int>(int); fails with: test2.cpp:6:15: error: ambiguous template specialization ‘f<int>’ for ‘void A<int>::f(int)’ test2.cpp:3:10: error: candidates are: void A<T1>::f(int) [with T1 = int] test2.cpp:4:32: error: template<class T2> void A::f(T2) [with T2 = T2; T1 = int] The instanciation should not be ambiguous as the '<int>' should exclude the non template f. Note that: template <typename T1> struct A { void f(int) {} template<typename T2> void f(T2) {} }; template void A<int>::f(int); fails as well, but I am not sufficiently standard savy to tell if this is compliant behaviour.