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

Reply via email to