https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109470
--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> --- No, "full-expression" is a formal term defined very precisely in the C++ standard. There is no opportunity for GCC to review that without failing to conform to the C++ standard. Changing when temporary objects are destroyed would be a massive breaking change to the C++ language that would break assumptions made by correct code. Just because you don't get a warning with other compilers, doesn't mean your code is correct. The code accesses an object outside its lifetime, and so has undefined behaviour. That is true with all compilers. Clang gives a runtime error with -fsanitize=address e.g. https://godbolt.org/z/dhcEhvzze That's because the program has undefined behaviour. This is not just GCC's interpretation of the C++ standard, it's a fact.