connect(sndr, rcvr)
that rcvr
expression is only evaluated onceSection: 33.9.10 [exec.connect] Status: Ready Submitter: Eric Niebler Opened: 2025-02-07 Last modified: 2025-02-11
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))
.
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-10; move to Ready]
Proposed resolution:
This wording is relative to N5001.
Modify 33.9.10 [exec.connect] as indicated:
-6- The expression
connect(sndr, rcvr)
is expression-equivalent to:
(6.1) —
Mandates: The type of the expression above satisfiesnew_sndr.connect(rcvr)
if that expression is well-formed.operation_state
.(6.2) — Otherwise,
connect-awaitable(new_sndr, rcvr)
.except that
Mandates:rcvr
is evaluated only once.sender<Sndr> && receiver<Rcvr>
istrue
.