diff --git a/execution.bs b/execution.bs index 90dd3d4..d12a9e8 100644 --- a/execution.bs +++ b/execution.bs @@ -5541,14 +5541,12 @@ enum class forward_progress_guarantee {
struct default_domain { - template <sender Sndr> - static constexpr sender decltype(auto) transform_sender(Sndr&& sndr) noexcept(see below); - - template <sender Sndr, queryable Env> - static constexpr sender decltype(auto) transform_sender(Sndr&& sndr, const Env& env) noexcept(see below); + template <sender Sndr, queryable... Env> + requires (sizeof...(Env) <= 1) + static constexpr sender decltype(auto) transform_sender(Sndr&& sndr, const Env&... env) noexcept(see below); template <sender Sndr, queryable Env> - static constexpr decltype(auto) transform_env(Sndr&& sndr, Env&& env) noexcept; + static constexpr queryable decltype(auto) transform_env(Sndr&& sndr, Env&& env) noexcept; template<class Tag, sender Sndr, class... Args> static constexpr decltype(auto) apply_sender(Tag, Sndr&& sndr, Args&&... args) noexcept(see below); @@ -5558,90 +5556,86 @@ struct default_domain { #### Static members [exec.domain.default.statics] #### {#spec-execution.default_domain.statics}-1. Returns: `dom.apply_sender(Tag(), std::forward-template <sender Sndr> - constexpr sender decltype(auto) default_domain::transform_sender(Sndr&& sndr) noexcept(see below); +template <sender Sndr, queryable... Env> + requires (sizeof...(Env) <= 1) + constexpr sender decltype(auto) default_domain::transform_sender(Sndr&& sndr, const Env&... env) noexcept(see below);-1. Returns: `tag_of_t().transform_sender(std::forward (sndr))` - if that expression is well-formed; otherwise, `std::forward (sndr)`. +1. Let e
be the expression + `tag_of_t().transform_sender(std::forward (sndr), env...)` if that + expression is well-formed; otherwise, `std::forward (sndr)`. -2. Remarks: The exception specification is equivalent to: +2. Returns: e
. -- noexcept(tag_of_t<Sndr>().transform_sender(std::forward<Sndr>(sndr))) -- - if that expression is well-formed; otherwise, `true`; +3. Remarks: The exception specification is equivalent tonoexcept(e)
.template <sender Sndr, queryable Env> - constexpr sender decltype(auto) default_domain::transform_sender(Sndr&& sndr, const Env& env) noexcept(see below); + constexpr queryable decltype(auto) default_domain::transform_env(Sndr&& sndr, Env&& env) noexcept;-1. Returns: `tag_of_t().transform_sender(std::forward (sndr), env)` - if that expression is well-formed; otherwise, `std::forward (sndr)`. - -2. Remarks: The exception specification is equivalent to: +4. Let e
be the expression + `tag_of_t().transform_env(std::forward (sndr), + std::forward (env))` if that expression is well-formed; otherwise, + `static_cast (std::forward (env))`. - - noexcept(tag_of_t<Sndr>().transform_sender(std::forward<Sndr>(sndr), env)) -+5. Mandates:noexcept(e)
is `true`. - if that expression is well-formed; otherwise, `true`; +6. Returns:e
.-template <sender Sndr, queryable Env> - constexpr decltype(auto) default_domain::transform_env(Sndr&& sndr, Env&& env) noexcept; +template<class Tag, sender Sndr, class... Args> + constexpr decltype(auto) default_domain::apply_sender(Tag, Sndr&& sndr, Args&&... args) noexcept(see below);-3. Returns: `tag_of_t().transform_env(std::forward (sndr), std::forward (env))` - if that expression is well-formed; otherwise, `static_cast (std::forward (env))`. +7. Let e
be the expression + `Tag().apply_sender(std::forward(sndr), std::forward (args)...)` + if that expression is well-formed; otherwise, this function shall not + participate in overload resolution. + +8. Constraints: e
is a well-formed expression. + +9. Returns:e
. + +10. Remarks: The exception specification is equivalent tonoexcept(e)
. -4. Mandates: The selected expression in Returns: is not potentially throwing. +### `execution::transform_sender` [exec.snd.transform] ### {#spec-execution.sender_transform}-template<class Tag, sender Sndr, class... Args> - static constexpr decltype(auto) default_domain::apply_sender(Tag, Sndr&& sndr, Args&&... args) noexcept(see below); +template<class Domain, sender Sndr, queryable... Env> + requires (sizeof...(Env) <= 1) + constexpr sender decltype(auto) transform_sender(Domain dom, Sndr&& sndr, const Env&... env) noexcept(see below);-5. Returns: `Tag().apply_sender(std::forward(sndr), std::forward (args)...)` - if that expression is well-formed; otherwise, this function shall not participate - in overload resolution. +1. Let sndr2
be the expression + `dom.transform_sender(std::forward(sndr), env...)` if that expression + is well-formed; otherwise, + `default_domain().transform_sender(std::forward (sndr), env...)`. Let + sndr3
besndr2
if +sndr2
and `sndr` have the same type ignoring *cv* + qualifiers; otherwise,transform_sender(dom, sndr2, env...)
. -6. Remarks: The exception specification is equivalent to: +2. Returns:sndr3
. -- noexcept(Tag().apply_sender(std::forward<Sndr>(sndr), std::forward<Args>(args)...)) -+3. Remarks: The exception specification is equivalent to +noexcept(sndr3)
. -### `execution::transform_sender` [exec.snd.transform] ### {#spec-execution.sender_transform} +### `execution::transform_env` [exec.snd.transform.env] ### {#spec-execution.env_transform}-template<class Domain, sender Sndr> - constexpr sender decltype(auto) transform_sender(Domain dom, Sndr&& sndr); - template<class Domain, sender Sndr, queryable Env> - constexpr sender decltype(auto) transform_sender(Domain dom, Sndr&& sndr, const Env& env); + constexpr queryable decltype(auto) transform_env(Domain dom, Sndr&& sndr, Env&& env) noexcept;-1. Returns: LetENV
be a parameter pack consisting of - the single expression `env` for the second overload and an empty pack for - the first. Let `sndr2` be the expression -dom.transform_sender(std::forward<Sndr>(sndr), - ENV...)
if that expression is well-formed; otherwise, -default_domain().transform_sender(std::forward<Sndr>(sndr), - ENV...)
. If `sndr2` and `sndr` have the same type ignoring *cv* - qualifiers, returns `sndr2`; otherwise,transform_sender(dom, sndr2, - ENV...)
. +1. Lete
be the expression + `dom.transform_env(std::forward(sndr), std::forward (env))` if + that expression is well-formed; otherwise, + `default_domain().transform_env(std::forward (sndr), + std::forward (env))`. - -template<class Domain, sender Sndr, queryable Env> - constexpr decltype(auto) transform_env(Domain dom, Sndr&& sndr, Env&& env) noexcept; -+2. Mandates:noexcept(e)
is `true`. -2. Returns: `dom.transform_env(std::forward(sndr), std::forward (env))` if that - expression is well-formed; otherwise, - `default_domain().transform_env(std::forward (sndr), std::forward (env))`. +2. Returns: e
. ### `execution::apply_sender` [exec.snd.apply] ### {#spec-execution.apply_sender} @@ -5650,23 +5644,17 @@ template<class Domain, class Tag, sender Sndr, class... Args> constexpr decltype(auto) apply_sender(Domain dom, Tag, Sndr&& sndr, Args&&... args) noexcept(see below);
e
be the expression `dom.apply_sender(Tag(),
+ std::forwarde
is well-formed.
- - noexcept(dom.apply_sender(Tag(), std::forward<Sndr>(sndr), std::forward<Args>(args)...)) -+1. Returns:
e
.
- if that expression is well-formed; otherwise,
-
- - noexcept(default_domain().apply_sender(Tag(), std::forward<Sndr>(sndr), std::forward<Args>(args)...)) -+2. Remarks: The exception specification is equivalent to +
noexcept(e)
.
### `execution::get_completion_signatures` [exec.getcomplsigs] ### {#spec-execution.getcomplsigs}