let_[*].transform_env is specified in terms of the let_* sender itself instead of its childSection: 33.9.12.10 [exec.let] Status: WP Submitter: Eric Niebler Opened: 2025-02-04 Last modified: 2025-06-23
Priority: 1
View all other issues in [exec.let].
View all issues with WP status.
Discussion:
Imported from cplusplus/sender-receiver #319.
33.9.12.10 [exec.let] para 13 reads:
13. LetThe sender passed tosndrandenvbe subexpressions, and letSndrbedecltype((sndr)). Ifsender-for<Sndr, decayed-typeof<let-cpo>>isfalse, then the expressionlet-cpo.transform_env(sndr, env)is ill-formed. Otherwise, it is equal toJOIN-ENV(let-env(sndr), FWD-ENV(env)).
let-env here should be the child of sndr.
[2025-02-07; Reflector poll]
Set priority to 1 after reflector poll.
"We seem to be missing a guarantee that auto [_,_,child] = sndr; works.
We guarantee that it can be used in a structured binding, but not that it
must work with a size of three."
[Hagenberg 2025-02-11; move to Ready]
[Sofia 2025-06-21; Status changed: Voting → WP.]
Proposed resolution:
This wording is relative to N5001.
-13- Letsndrandenvbe subexpressions, and letSndrbedecltype((sndr)). Ifsender-for<Sndr, decayed-typeof<let-cpo>>isfalse, then the expressionlet-cpo.transform_env(sndr, env)is ill-formed. Otherwise, it is equal toJOIN-ENV(let-env(sndr), FWD-ENV(env)).auto& [_, _, child] = sndr; return JOIN-ENV(let-env(child), FWD-ENV(env));