This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.

4190. Specification of completion-signatures-for in [exec.snd.expos]/p39 is recursive

Section: 33.9.2 [exec.snd.expos] Status: New Submitter: Eric Niebler Opened: 2025-01-02 Last modified: 2025-02-07

Priority: 2

View all issues with New status.

Discussion:

33.9.2 [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 (33.3 [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!

[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 ...".

Proposed resolution:

This wording is relative to N5001.

  1. Modify 33.9.2 [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 (6.3 [basic.def.odr]) as a result of evaluating op.start().starting (33.3 [exec.async.ops]) the operation state that results from connecting sndr and rcvr. When sender_in<Sndr, Env> is falseOtherwise, 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.

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy