diff --git a/xml/issue4190.xml b/xml/issue4190.xml new file mode 100644 index 0000000000..c015d89892 --- /dev/null +++ b/xml/issue4190.xml @@ -0,0 +1,70 @@ + + + + +Specification of <i>completion-signatures-for</i> in [exec.snd.expos]/p39 is recursive +
+Eric Niebler +2 Jan 2025 +99 + + +

+/p39 reads: +

+
+

+For a subexpression `sndr` let `Sndr` be `decltype((sndr))`. Let `rcvr` be a receiver with an associated +environment of type `Env` such that sender_in<Sndr, Env> is `true`. +completion-signatures-for<Sndr, Env> denotes a specialization of `completion_signatures`, +the set of whose template arguments correspond to the set of completion operations that are potentially +evaluated as a result of starting () the operation state that results from +connecting `sndr` and `rcvr`. When sender_in<Sndr, Env> is `false`, the type denoted +by completion-signatures-for<Sndr, Env>, if any, is not a specialization of +`completion_signatures`. +

+
+

+This paragraph is trying to specify the return type of basic-sender::get_completion_signatures, +but it immediately goes off the rails when it tests for the satisfaction of sender_in<Sndr, Env>. +The sender_in<Sndr, Env> concept requires that get_completion_signatures(sndr, env) is +well-formed and that its type is a specialization of completion_signatures. But the return type of +`get_completion_signatures(sndr, env)` is exactly the thing this para is trying to define! +

+
+ + +

+This wording is relative to . +

+ +
    + +
  1. Modify as indicated:

    + +

    +-39- Let type `Sndr` be a (possibly `const`-qualified) specialization of basic-sender +or an lvalue reference of such, and let `Rcvr` be the type of a receiver with an associated environment +of type `Env`. If the type basic-operation<Sndr, Rcvr> is well-formed, let `op` be +an lvalue subexpression of that type.For a subexpression `sndr` let `Sndr` be `decltype((sndr))`. +Let `rcvr` be a receiver with an associated environment of type `Env` such that sender_in<Sndr, Env> +is `true`. completion-signatures-for<Sndr, Env> denotes a specialization of +`completion_signatures`, the set of whose template arguments correspond to the set of completion operations +that are potentially evaluated () as a result of +evaluating `op.start()`.starting () the operation state that results from +connecting `sndr` and `rcvr`. When sender_in<Sndr, Env> is `false`Otherwise, +the type denoted by completion-signatures-for<Sndr, Env>, if any, is not a +specialization of `completion_signatures`. +

    +Recommended practice: When the type basic-operation<Sndr, Rcvr> is +ill-formedsender_in<Sndr, Env> is `false`, implementations are encouraged +to use the type denoted by completion-signatures-for<Sndr, Env> to communicate to +users why. + +

    +
  2. +
+ +
+ +