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.
I suspect this is basically PR 71093.
Confirmed. I thought I saw another issue related to this one where the variable goes out of scope instead.
Seems fixed on trunk ?
(In reply to Gabriel Ravier from comment #3) > Seems fixed on trunk ? It seems to have been fixed for GCC 14 even.
Dup. *** This bug has been marked as a duplicate of bug 71093 ***