[stmt.return.coroutine] (original) (raw)
8 Statements [stmt]
8.7 Jump statements [stmt.jump]
8.7.5 The co_return statement [stmt.return.coroutine]
A co_return statement transfers control to the caller or resumer of a coroutine ([dcl.fct.def.coroutine]).
A coroutine shall not enclose a return statement ([stmt.return]).
[Note 1:
For this determination, it is irrelevant whether the return statement is enclosed by a discarded statement ([stmt.if]).
— _end note_]
A co_return statement is equivalent to:
{ S; goto final-suspend; }
where final-suspend is the exposition-only label defined in [dcl.fct.def.coroutine]and S is defined as follows:
- The expression S shall be a prvalue of type void.
- The expression p.return_void()shall be a prvalue of type void.
If a search for the name return_void in the scope of the promise type finds any declarations, flowing off the end of a coroutine's function-bodyis equivalent to a co_return with no operand; otherwise flowing off the end of a coroutine's function-bodyresults in undefined behavior.