https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95735
Bug ID: 95735
Summary: ICE on invalid non-type template argument
Product: gcc
Version: 10.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: johelegp at gmail dot com
Target Milestone: ---
See https://godbolt.org/z/v7iLPn.
```C++
template <auto F>
requires requires { F(); }
bool v{};
void f() {
int x;
static_assert(v<throw>);
}
```
<source>: In function 'void f()':
<source>:7:19: error: parse error in template argument list
7 | static_assert(v<throw>);
| ^~~~~~~~
<source>:7:19: error: template argument 1 is invalid
<source>:7: confused by earlier errors, bailing out
Compiler returned: 1
Less silly example: https://godbolt.org/z/-bWfJ4.
```C++
template <auto F>
requires requires { F(); }
bool v{};
void f() {
int x;
static_assert(v<[&] { x++; }>);
}
```
<source>: In function 'void f()':
<source>:7:19: error: '<lambda closure object>f()::<lambda()>{x}' is not a
constant expression
7 | static_assert(v<[&] { x++; }>);
| ^~~~~~~~~~~~~~~
<source>:7: confused by earlier errors, bailing out
Compiler returned: 1