http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60786
Bug ID: 60786 Summary: In C++11 an explicit instantiation with an unqualified name must be in the right namespace Product: gcc Version: 4.9.0 Status: UNCONFIRMED Keywords: accepts-invalid Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: redi at gcc dot gnu.org This should not be accepted in C++11 mode: namespace A { template<typename T> struct B { }; } using A::B; template class B<int>; [temp.explicit] p3: "An explicit instantiation shall appear in an enclosing namespace of its template. If the name declared in the explicit instantiation is an unqualified name, the explicit instantiation shall appear in the namespace where its template is declared or, if that namespace is inline (7.3.1), any namespace from its enclosing namespace set." This is a change from C++03: "A definition of a class template or class member template shall be in scope at the point of the explicit instantiation of the class template or class member template."