https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119916
--- Comment #12 from Iain Sandoe <iains at gcc dot gnu.org> --- noting the CWG issue, this is a tricky area since [current] tests might be expecting either the existing clang/MSVC (and previous GCC) behaviour - or the revised GCC behaviour. What seems clear to me is that the intention of the design was to allow the coroutine body access to the coroutine return object (e.g. as a place to communicate status, etc). Ergo, it seems that this implies that the return object must be completely constructed before the initial suspend. If we put it in some temporary place, then we end up with problems moving it into the result object when the ramp returns... which is why we've placed it in the result.