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}
 
 
-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 to noexcept(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 to noexcept(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 be sndr2 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: Let ENV 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. Let e 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);
-1. Returns: `dom.apply_sender(Tag(), std::forward(sndr), std::forward(args)...)` if that - expression is well-formed; otherwise, - `default_domain().apply_sender(Tag(), std::forward(sndr), std::forward(args)...)` - if that expression is well-formed; otherwise, this function shall not participate in - overload resolution. +1. Let e be the expression `dom.apply_sender(Tag(), + std::forward(sndr), std::forward(args)...)` if that expression + is well-formed; otherwise, `default_domain().apply_sender(Tag(), + std::forward(sndr), std::forward(args)...)`. -2. Remarks: The exception specification is equivalent to: +2. Constraints: The expression e 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}