https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118874
--- Comment #10 from Iain Sandoe <iains at gcc dot gnu.org> --- In the coroutine handling to deal with https://eel.is/c++draft/dcl.fct.def.coroutine#7 we unconditionally create the return object in the <retval> slot - if we create it somewhere else, that causes us to produce an unexpected additional copy. So, I suppose, the difference is the unconditional use (it's not clear to me at the moment how to avoid that - the intent (AFAIU) is that the return object is available to the coroutine body (including initial suspend)).