[exec.sync.wait.var] (original) (raw)

33 Execution control library [exec]

33.9 Senders [exec.snd]

33.9.13 Sender consumers [exec.consumers]

33.9.13.2 this_thread​::​sync_wait_with_variant [exec.sync.wait.var]

The name this_thread​::​sync_wait_with_variant denotes a customization point object.

For a subexpression sndr, let Sndr be decltype(into_variant(sndr)).

If sender_in<Sndr, _sync-wait-env_>is false,this_thread​::​sync_wait_with_variant(sndr) is ill-formed.

Otherwise, it is expression-equivalent to the following, except sndr is evaluated only once:apply_sender(get-domain-early(sndr), sync_wait_with_variant, sndr) Mandates:

If callable<sync_wait_t, Sndr> is false, the expression sync_wait_with_variant.apply_sender(sndr) is ill-formed.

Otherwise, it is equivalent to:using result_type = sync-wait-with-variant-result-type<Sndr>;if (auto opt_value = sync_wait(into_variant(sndr))) { return result_type(std::move(get<0>(*opt_value)));} return result_type(nullopt);

The behavior of this_thread​::​sync_wait_with_variant(sndr)is undefined unless: