On 2014.11.11 at 10:11 -0500, Jason Merrill wrote: > On 11/08/2014 06:57 AM, Markus Trippelsdorf wrote: > > +++ b/gcc/testsuite/g++.old-deja/g++.pt/explicit73.C > > @@ -7,9 +7,9 @@ > > // the template > > > > namespace N { > > - template <class T> class foo; // { dg-error "" } referenced below > > + template <class T> class foo; // { dg-error "" "" { target { ! c++11 > > } } } referenced below > > } > > > > using namespace N; > > > > -template <> class foo<void>; // { dg-error "" } invalid specialization > > +template <> class foo<void>; // { dg-error "" "" { target { ! c++11 } } } > > invalid specialization > > This should still get an error in C++11 mode.
Both EGG and clang currently accept it. > I think we also need to test this: > > namespace A { > namespace B { > template <class T> void f(); > } > using namespace B; > } > > template<> void A::f<>(); // { dg-error "" } > I think your code won't catch this, because we need to know what the > explicit namespace was, not just whether there was one. This is already caught: error: template-id ‘f<>’ for ‘void A::f()’ does not match any template declaration > Can we handle this in check_explicit_specialization rather than all the > way down in register_specialization? I will look into it. -- Markus