https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102623
Bug ID: 102623 Summary: Failure to detect destructed scalar objects in consteval function Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: gabravier at gmail dot com Target Milestone: --- using T = int; consteval bool f() { T t = 42; t.~T(); return (t == 42); } bool x = f(); This code should not compile, as `f` invokes undefined behavior during constant evaluation, as Clang diagnoses: <source>:9:10: error: call to consteval function 'f' is not a constant expression bool x = f(); ^ <source>:6:11: note: read of object outside its lifetime is not allowed in a constant expression return (t == 42); ^ The specific usage with `int` here was not UB until C++20 (although pseudo-destructors weren't allowed in constant expressions until C++20 anyway), but as of http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p0593r6.html#pseudo-destructor-calls pseudo-destructors end the lifetime of the operand.