https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119838
Bug ID: 119838
Summary: optional template keyword causing error
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: mpolacek at gcc dot gnu.org
Target Milestone: ---
I believe this should compile:
```
template<typename T>
struct S { using U = T; static const int x = 0; };
void
g ()
{
::S<int>::U a;
::template S<int>::U b;
auto c = ::S<int>::x;
auto d = ::template S<int>::x;
}
```
because "::template S<int>::" should match the
nested-name-specifier template(opt) simple-template-id ::
production where the template is optional. But we emit:
g.C: In function ‘void g()’:
g.C:7:24: error: qualified-id in declaration before ‘b’
7 | ::template S<int>::U b;
| ^
g.C:9:14: error: expected id-expression before ‘template’
9 | auto d = ::template S<int>::x;
| ^~~~~~~~
Other compilers accept the code.