https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98675
Tobias Schlüter <tobi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |tobi at gcc dot gnu.org --- Comment #2 from Tobias Schlüter <tobi at gcc dot gnu.org> --- Here's another testcase (derived from code in the Eigen library ) that seems to illustrate the same issue. Please follow the compiler explorer link to see a non-constexpr version and its gimple that makes clear that there indeed is a lifetime issue and also clang's error message https://godbolt.org/z/4zoKaoKa5 struct B; #define CONSTEXPR constexpr #define CONSTEVAL consteval struct A { public: CONSTEXPR A() { m_val = 1; } CONSTEXPR A(const A& other) { m_val = other.m_val;} CONSTEXPR ~A() {}; CONSTEXPR int val() { return m_val; } int m_val; CONSTEXPR B operator<<(int); }; struct B { A& m_a; CONSTEXPR B(A& ref) : m_a(ref) {} CONSTEXPR B& operator,(int i) { m_a.m_val = i; return *this; } CONSTEXPR ~B() { finished(); } CONSTEXPR A finished() { return m_a; } }; CONSTEXPR B A::operator<<(int i) { m_val = i; return B(*this); } CONSTEVAL int f() { A a = (A() << 1, 2, 3, 4).finished(); return a.val(); } int g() { return f(); }