https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114504

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2024-03-27

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
So it looks like it is just an issue with the way requires is handled.
That is doing it outside of a requires rejects the code correctly:
```
...


template <typename T>
int f(void)
{
        []<T t> {}; 
        return 0;
}

auto t = f<NonStructuralType>();

```

Is rejected correctly with:
```

<source>: In instantiation of 'int f() [with T = NonStructuralType]':
<source>:24:30:   required from here
   24 | auto t = f<NonStructuralType>();
      |          ~~~~~~~~~~~~~~~~~~~~^~
<source>:20:9: error: 'NonStructuralType' is not a valid type for a template
non-type parameter because it is not structural
   20 |         []<T t> {};
      |         ^~~~~~~~~~
<source>:10:9: note: 'NonStructuralType::a' is not public
   10 |     int a;
      |         ^
```

Reply via email to