Title
Sender spec depends on unspecified order of evaluation
Status
new
Section
[exec.snd]
Submitter
Frank Birbacher

Created on 2025-02-14.00:00:00 last changed 1 month ago

Messages

Date: 2025-10-15.00:00:00

[ 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.”"

Date: 2025-02-14.00:00:00

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 [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. [exec.then] p3

  2. [exec.let] p4

  3. [exec.bulk] p2

  4. [exec.split] p4

  5. [exec.when.all] p3

  6. [exec.into.variant] p3

  7. [exec.stopped.opt] p2

  8. [exec.stopped.err] p2

  9. [exec.sync.wait.var] p1

History
Date User Action Args
2025-10-23 12:39:14adminsetmessages: + msg15394
2025-02-14 00:00:00admincreate