https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98675
Bug ID: 98675 Summary: Accessing member of temporary outside its lifetime allowed in constexpr function Product: gcc Version: 10.2.1 Status: UNCONFIRMED Keywords: accepts-invalid Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: redi at gcc dot gnu.org Target Milestone: --- struct X { int i = 0; constexpr int& get() { return i; } }; constexpr int g() { const auto& i = X{}.get(); return i; // undefined } constexpr auto i = g(); G++ fails to diagnose the error here. Clang says: <source>:13:16: error: constexpr variable 'i' must be initialized by a constant expression constexpr auto i = g(); ^ ~~~ <source>:10:12: note: read of object outside its lifetime is not allowed in a constant expression return i; // undefined ^ <source>:13:20: note: in call to 'g()' constexpr auto i = g(); ^ Intel says: <source>(13): error: expression must have a constant value constexpr auto i = g(); ^ <source>(10): note: attempt to access expired storage return i; // undefined ^