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.

4213. Sender spec depends on unspecified order of evaluation

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.

Repetitions are at least in:

  1. 33.9.12.9 [exec.then] p3

  2. 33.9.12.10 [exec.let] p4

  3. 33.9.12.11 [exec.bulk] p2

  4. [exec.split] p4

  5. 33.9.12.12 [exec.when.all] p3

  6. 33.9.12.13 [exec.into.variant] p3

  7. 33.9.12.14 [exec.stopped.opt] p2

  8. 33.9.12.15 [exec.stopped.err] p2

  9. 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: