[temp.pre] (original) (raw)

[Note 5:

A template cannot have the same name as any other name bound in the same scope ([basic.scope.scope]), except that a function template can share a name with using-declarators, a type, non-template functions ([dcl.fct]) and/or function templates ([temp.over]).

Specializations, including partial specializations ([temp.spec.partial]), do not reintroduce or bind names.

Their target scope is the target scope of the primary template, so all specializations of a template belong to the same scope as it does.

[Example 2: void f() {} class f {}; namespace N { void f(int) {} } using N::f; template<typename> void f(long) {} template<typename> void f(long) {} template<typename> void f(long long) {} template<> void f<int>(long long) {} — _end example_]

— _end note_]