Title
Specification of completion-signatures-for in [exec.snd.expos]/p39 is recursive
Status
new
Section
[exec.snd.expos]
Submitter
Eric Niebler

Created on 2025-01-02.00:00:00 last changed 3 days ago

Messages

Date: 2025-02-07.20:50:56

Proposed resolution:

This wording is relative to N5001.

  1. Modify [exec.snd.expos] 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 ([basic.def.odr]) as a result of evaluating `op.start()`.starting ([exec.async.ops]) 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.

Date: 2025-02-15.00:00:00

[ 2025-02-07; Reflector poll ]

Set priority to 2 after reflector poll.

First sentence of p39 should be either "Let the type `Sndr` be ..." or "Let `Sndr` be ...", but not "Let type `Sndr` be ...".

Date: 2025-01-02.00:00:00

[exec.snd.expos]/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 ([exec.async.ops]) 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!

History
Date User Action Args
2025-02-07 20:50:56adminsetmessages: + msg14593
2025-01-18 14:56:23adminsetmessages: + msg14537
2025-01-02 00:00:00admincreate