The C++20 standard defines a "noop coroutine" in [coroutine.noop]. What is it?
And how is it different from a function whose body is { co_return; }?
UPDATE
Thank you for the links to the proposal and to the standard. To summarize from these references, a "noop coroutine" is one for which the resume() (or operator()) and destroy() methods have no side-effects.
But destroy() on a user-written coroutine always (I think!) has a side effect, namely destroying the coroutine and further calls to the coroutine handle methods including resume() and destroy() will now be undefined behavior, which is different than no-side-effects behavior.
In summary, there is no way to write a coroutine such that destroy() has no side effects, and only the library-provided noop coroutine has this property, correct?
(Updated answers welcome, in response to this update of my question.)