https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116099
Bug ID: 116099
Summary: Inconsistent errors for ClassTemplate<NotDeclared> and
ClassTemplate<const NotDeclared>
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Keywords: diagnostic
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: redi at gcc dot gnu.org
Target Milestone: ---
template<class T> struct S { };
S<Oops> o;
S<const Oops> oo;
x.cc:3:3: error: 'Oops' was not declared in this scope
3 | S<Oops> o;
| ^~~~
x.cc:3:7: error: template argument 1 is invalid
3 | S<Oops> o;
| ^
x.cc:4:9: error: ISO C++ forbids declaration of 'type name' with no type
[-fpermissive]
4 | S<const Oops> oo;
| ^~~~
x.cc:4:13: error: template argument 1 is invalid
4 | S<const Oops> oo;
| ^
It would be nice to get the same error for both cases.
Aside: if I use -fpermissive it still won't compile (unsurprisingly):
x.cc:4:9: warning: ISO C++ forbids declaration of ‘type name’ with no type
[-fpermissive]
4 | S<const Oops> oo;
| ^~~~
x.cc:4:13: error: template argument 1 is invalid
4 | S<const Oops> oo;
| ^
Maybe a permerror here isn't useful?