Skip to content

constraints on user customizations of standard sender algorithms are incorrectly specified #308

Description

@ericniebler

[exec.snd.general]/p1 reads:

Subclauses [exec.factories] and [exec.adapt] define customizable algorithms that return senders. Each algorithm has a default implementation. Let sndr be the result of an invocation of such an algorithm or an object equal to the result ([concepts.equality]), and let Sndr be decltype((sndr)). Let rcvr be a receiver of type Rcvr with associated environment env of type Env such that sender_to<Sndr, Rcvr> is true. For the default implementation of the algorithm that produced sndr, connecting sndr to rcvr and starting the resulting operation state ([exec.async.ops]) necessarily results in the potential evaluation ([basic.def.odr]) of a set of completion operations whose first argument is a subexpression equal to rcvr. Let Sigs be a pack of completion signatures corresponding to this set of completion operations. Then the type of the expression get_completion_signatures(sndr, env) is a specialization of the class template completion_signatures ([exec.util.cmplsig]), the set of whose template arguments is Sigs. If a user-provided implementation of the algorithm that produced sndr is selected instead of the default, any completion signature that is in the set of types denoted by completion_signatures_of_t<Sndr, Env> and that is not part of Sigs shall correspond to error or stopped completion operations, unless otherwise specified.

The emphasized sentence is the problem. Since P2300 got lazy customization, the expression get_completion_signatures(snd, env) could dispatch to a customization. We should define a low-level exposition-only get-completion-signatures function that does the same as get_completion_signatures except without the sender transformation. Then we can express get_completion_signatures in terms of that.

Activity

  1. jwakely commented on Feb 3, 2025

    @jwakely
    Member
  2. jwakely commented on Mar 31, 2026

    @jwakely
    Member

    Was this resolved by the changes in P3557R3?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1bugSomething isn't workingneeds-proposed-resolutionThis issue does not yet have a proposed resolution but needs onepending-wg21A paper or an LWG issue exits

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions