Skip to content

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

Open
@lewissbaker

Description

@lewissbaker
Collaborator

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

ericniebler

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.
ericniebler

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

        Participants

        @lewissbaker@ericniebler

        Issue actions

          [exec.connect] wording needs to ensure that in `connect(sndr, rcvr)` that `rcvr` expression is only evaluated once · Issue #325 · cplusplus/sender-receiver