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

4208. Wording needs to ensure that in connect(sndr, rcvr) that rcvr expression is only evaluated once

Section: 33.9.10 [exec.connect] Status: Ready Submitter: Eric Niebler Opened: 2025-02-07 Last modified: 2025-02-12

Priority: Not Prioritized

View all issues with Ready status.

Discussion:

Imported from cplusplus/sender-receiver #325.

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.

[Hagenberg 2025-02-11; move to Ready]

Proposed resolution:

This wording is relative to N5001.

  1. Modify 33.9.10 [exec.connect] as indicated:

    -6- The expression connect(sndr, rcvr) is expression-equivalent to:

    1. (6.1) — new_sndr.connect(rcvr) if that expression is well-formed.

      Mandates: The type of the expression above satisfies operation_state.

    2. (6.2) — Otherwise, connect-awaitable(new_sndr, rcvr).

    except that rcvr is evaluated only once.

    Mandates: sender<Sndr> && receiver<Rcvr> is true.