https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115908
Bug ID: 115908 Summary: [coroutines] Wrong behavior of using get_return_object() coroutines creation Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: ddvamp007 at gmail dot com Target Milestone: --- The standard says: "The expression promise.get_return_object() is used to initialize the returned reference or value result object of a call to a coroutine. The call to get_return_object is sequenced before the call to initial_suspend and is invoked at most once." [dcl.fct.def.coroutine] However, if you look at the result of the following program https://godbolt.org/z/nY8Yo6vGs, it can be seen that the standard is not being followed. Firstly, it is not the expression itself that is used for initialization, but its result Secondly, if this result is a reference, it is still stored as a value As a consequence, the behavior is not what the user expects. If we return an non-copyable and non-movable object type referece, we will get a compilation error. If the result contains references to the promise object, it may be destroyed before it is used. etc. P.S. The same thing is observed in clang