Skip to content

[exec.connect] wording needs to ensure that in connect(sndr, rcvr) that rcvr expression is only evaluated once #325

Description

@lewissbaker

The current wording of connect(sndr, rcvr) defines the new_sndr expression as transform_sender(decltype(get-domain-late(sndr, get_env(rcvr))){}, sndr, get_env(rcvr)).

It then defines connect(sndr, rcvr) as expression equivalent to new_sndr.connect(rcvr).

As currently worded, this requires evaluating the rcvr expression twice. Note that the first usage in the new_sndr expression is unevaluated, but the second usage in get_env(rcvr) is evaluated.

I think we need to add an extra sentence at the end of this section saying "Where the expression rcvr is only evaluated once." or similar.

Activity

  1. ericniebler commented on Feb 7, 2025

    @ericniebler
    Collaborator

    Proposed resolution

    Change [exec.connect] p6 as follows:

     The expression connect(sndr, rcvr) is expression-equivalent to:
     
     - (6.1) new_sndr.connect(rcvr) if that expression is well-formed
     
         Mandates: The type of the expression above satisfies operation_state.
      
     - (6.2) Otherwise, connect-awaitable(new_sndr, rcvr)
    
    +except that `rcvr` is evaluated only once.
    + 
     Mandates: sender<Sndr> && receiver<Rcvr> is true.
  2. ericniebler commented on Feb 9, 2025

    @ericniebler
    Collaborator
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

    P2bugSomething isn't workingpending-wg21A paper or an LWG issue exitswording

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions