in [exec.as.awaitable], the concept awaitable-sender is true for senders that can be adapted into awaitables. it is specified as:
template<class Sndr, class Promise>
concept awaitable-sender =
single-sender<Sndr, env_of_t<Promise>> &&
sender-to<Sndr,
typename sender-awaitable<Sndr, Promise>::awaitable-receiver> && // see below
requires (Promise& p) {
{ p.unhandled_stopped() } -> convertible_to<coroutine_handle<>>;
};
this says a sender can only be awaitable if the promise type provides an unhandled_stopped() member function that returns a coroutine_handle.
it does not require or mandate that unhandled_stopped() be noexcept.
since it is likely to be only called from a receiver's set_stopped member function (which is required to be noexcept), there is nothing to be done with an exception thrown from unhandled_stopped() except terminate.
in [exec.as.awaitable], the concept
awaitable-senderis true for senders that can be adapted into awaitables. it is specified as:this says a sender can only be awaitable if the promise type provides an
unhandled_stopped()member function that returns acoroutine_handle.it does not require or mandate that
unhandled_stopped()benoexcept.since it is likely to be only called from a receiver's
set_stoppedmember function (which is required to benoexcept), there is nothing to be done with an exception thrown fromunhandled_stopped()except terminate.