66<section ><sref ref =" [exec.let]" /></section >
77<submitter >Eric Niebler</submitter >
88<date >03 Feb 2025</date >
9- <priority >99 </priority >
9+ <priority >1 </priority >
1010
1111<discussion >
1212<p >
@@ -30,6 +30,12 @@ Paragraphs 8, 9, and 10 only make sense in relation to the lambda in paragraph 7
3030but that is not at all clear from the current wording.
3131I suggest making paragraphs 8, 9, and 10 sub-bullets of paragraph 7.
3232</p >
33+
34+ <note >2025-02-07; Reflector poll</note >
35+ <p >
36+ Set priority to 1 after reflector poll.
37+ </p >
38+
3339</discussion >
3440
3541<resolution >
@@ -42,6 +48,44 @@ Change <sref ref="[exec.let]"/> as indicated,
4248and nest paragraphs 8, 9, and 10 below paragraph 7:
4349
4450<blockquote >
51+ <p >
52+ -7-
53+ <code ><i >impls-for</i >< <i >decayed-typeof</i >< <i >let-cpo</i >>> ::<i >get-state</i ></code >
54+ is initialized with a callable object equivalent to the following:
55+ <pre ><code >
56+ []< class Sndr, class Rcvr> (Sndr&& sndr, Rcvr& rcvr) requires <i >see below</i > {
57+ auto& [_, fn, child] = sndr;
58+ using fn_t = decay_t< decltype(fn)> ;
59+ using env_t = decltype(<i >let-env</i >(child));
60+ using args_variant_t = <i >see below</i >;
61+ using ops2_variant_t = <i >see below</i >;
62+
63+ struct state-type {
64+ fn_t fn; <i >// exposition only</i >
65+ env_t env; <i >// exposition only</i >
66+ args_variant_t args; <i >// exposition only</i >
67+ ops2_variant_t ops2; <i >// exposition only</i >
68+ };
69+ return <i >state-type</i >{std::forward_like< Sndr> (fn), <i >let-env</i >(child), {}, {}};
70+ }
71+ </code ></pre >
72+ </p >
73+ <p >
74+ -8-
75+ Let `Sigs` be a pack of the arguments to the `completion_signatures`
76+ specialization named by
77+ <code >completion_signatures_of_t< <i >child-type</i >< Sndr> ,
78+ env_of_t< Rcvr>> </code >.
79+ Let `LetSigs` be a pack of those types in `Sigs` with a return type of
80+ <code ><i >decayed-typeof</i >< <i >set-cpo</i >> </code >.
81+ Let `as-tuple` be an alias template such that
82+ <code ><i >as-tuple</i >< Tag(Args...)> </code >
83+ denotes the type <code ><i >decayed-tuple</i >< Args...> </code >.
84+ Then `args_variant_t` denotes the type
85+ <code >variant< monostate, <i >as-tuple</i >< LetSigs> ...> </code >
86+ except with duplicate types removed.
87+ </p >
88+ <p >
4589-9-
4690Given a type `Tag` and a pack `Args`, let <code ><i >as-sndr2</i ></code >
4791be an alias template such that
@@ -52,6 +96,12 @@ Then `ops2_variant_t` denotes the type
5296<pre ><code > variant< monostate, connect_result_t< <i >as-sndr2</i >< LetSigs> , receiver2< Rcvr, <del >Env</del ><ins >env_t</ins >>> ...>
5397</code ></pre >
5498except with duplicate types removed.
99+ </p >
100+ <p >
101+ -10-
102+ The <i >requires-clause</i > constraining the above lambda is satisfied
103+ if and only if the types `args_variant_t` and `ops2_variant_t` are well-formed.
104+ </p >
55105</blockquote >
56106
57107</li >
0 commit comments