https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114561
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- Reduced: void* const NONE = nullptr; //Compiles void beforeParam(); template<typename U> void create(U && u) noexcept { const void* const& r = ( (void) beforeParam(), u ); } void test_func() { create(NONE); } comma.cc: In instantiation of ‘void create(U&&) [with U = void* const&]’: comma.cc:11:11: required from here comma.cc:7:24: error: lvalue required as unary ‘&’ operand 7 | const void* const& r = ( (void) beforeParam(), u ); | ^ GCC has recurring problems with parentheses causing lvalue expressions to be incorrectly treated as rvalues.