https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102262
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Simpler testcase, the class doesn't need to be a template, but check does: struct S { constexpr S () { } ~S () { } }; template <typename T> constexpr bool check () { T t; return true; } constexpr bool a = check<S> (); constexpr bool check2 () { S s; return true; } constexpr bool b = check2 (); because check2 is diagnosed properly: pr102262.C: In function ‘constexpr bool check2()’: pr102262.C:18:5: error: variable ‘s’ of non-literal type ‘S’ in ‘constexpr’ function 18 | S s; | ^ pr102262.C:1:8: note: ‘S’ is not literal because: 1 | struct S | ^ pr102262.C:1:8: note: ‘S’ does not have ‘constexpr’ destructor