https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55809
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- MSVC gives: <source>(3): error C2995: 'void f(void)': function template has already been defined <source>(2): note: see declaration of 'f' <source>(2): error C3861: 'f': identifier not found ICC gives: <source>(11): error: more than one instance of overloaded function "f" matches the argument list: function template "void f<T,<unnamed>>()" function template "void f<T,<unnamed>>()" int main() { f<A, &x2>(); f<B, &x1>(); } ^ clang accepts it.