This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.
Section: 33.9 [exec.snd] Status: New Submitter: Frank Birbacher Opened: 2025-02-14 Last modified: 2025-10-23
Priority: 2
View all issues with New status.
Discussion:
In certain clauses for defining senders the unspecified order of evaluation of function arguments can lead to retrieving values from a move-from state of a sender. An example is 33.9.12.6 [exec.continues.on] where paragraph 3 states:
transform_sender(get-domain-early(sndr), make-sender(continues_on, sch, sndr))
In this expression the evaluation of get-domain-early(sndr)
can happen before or after
the make-sender
. The latter can steal the value from sndr
by moving from it. So
get-domain-early
may see the moved-from state of sndr
and fail to obtain anything.
33.9.12.9 [exec.then] p3
33.9.12.10 [exec.let] p4
33.9.12.11 [exec.bulk] p2
[exec.split] p4
33.9.12.12 [exec.when.all] p3
33.9.12.13 [exec.into.variant] p3
33.9.12.14 [exec.stopped.opt] p2
33.9.12.15 [exec.stopped.err] p2
33.9.13.2 [exec.sync.wait.var] p1
[2025-10-23; Reflector poll.]
Set priority to 2 after reflector poll.
"Don't want to have to consider whether you can call get_env
on a moved-from sender.
If the domain is a stateless tag type, then get-domain-early's return value
can't depend on the actual value of the sender, just its type.
If that's correct, we can just spell this decltype(get-domain-early(sndr)){}
.
We already do this for get-domain-late."
"The point of all these exposition-only things was to make the wording more compact and readable.
Adding decltype
and parens everywhere wouldn't help that.
Maybe change get-domain-early and get-domain-late from function templates
to all-caps wording macros, e.g. GET-DOMAIN-EARLY
(sndr)
?"
"NAD, I think the issue is covered by “except sndr is evaluated just once.”"
Proposed resolution: