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

Reply via email to