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."