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