std::coroutine_handle<Promise>::operator(), std::coroutine_handle<Promise>::resume
Member of other specializations |
||
void operator()() const; void resume() const; |
(1) | (since C++20) |
Member of specialization std::coroutine_handle<std::noop_coroutine_promise> |
||
constexpr void operator()() const noexcept; constexpr void resume() const noexcept; |
(2) | (since C++20) |
The behavior is undefined if the resumption is needed, and *this does not refer to suspended coroutine or the coroutine is suspended at its final suspend point. A concurrent resumption of the coroutine may result in a data race.
Resumption of a coroutine on an execution agent other than the one on which it was suspended has implementation-defined behavior unless each execution agent either is a thread represented by std::thread or std::jthread, or is the thread executing main
.
Parameters
(none)
Return value
(none)
Notes
A coroutine that is resumed on a different execution agent should avoid relying on consistent thread identity throughout, such as holding a mutex object across a suspend point.
N4861 (C++20 final working draft) requires that a call to operator()
or resume
on a std::coroutine_handle<> converted from a std::noop_coroutine_handle is also no-op, which is unimplementable because a std::noop_coroutine_handle may refer to a coroutine that is not no-op, or may not refer to a coroutine. This is LWG issue 3460.
Example
This section is incomplete Reason: no example |
See also
(C++20) |
destroys a coroutine (public member function) |