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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2024-07-26
   Target Milestone|---                         |12.5
      Known to fail|                            |10.1.0, 12.1.0
      Known to work|                            |9.5.0
             Status|UNCONFIRMED                 |NEW
            Summary|GCC crashes on incorrect    |[12/13/14/15 Regression]
                   |code with -std=c++20        |GCC crashes on incorrect
                   |                            |code with -std=c++20
           Keywords|error-recovery              |

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Reduced testcase:
```
template<class T>
struct size_t_class {
        const size_t_class value = 1;
};
size_t_class t{2};
```

This is invalid since size_t_class is incomplete type in itself :). Well and
there is no way to  deduce the template argument here.

GCC 9.5.0 reported:
```
<source>:5:17: error: class template argument deduction failed:
    5 | size_t_class t{2};
      |                 ^
<source>:5:17: error: no matching function for call to 'size_t_class(int)'
<source>:2:8: note: candidate: 'template<class T>
size_t_class(size_t_class<T>)-> size_t_class<T>'
    2 | struct size_t_class {
      |        ^~~~~~~~~~~~
<source>:2:8: note:   template argument deduction/substitution failed:
<source>:5:17: note:   mismatched types 'size_t_class<T>' and 'int'
    5 | size_t_class t{2};
      |                 ^
```


So a regression.

Reply via email to