@@ -175,39 +175,39 @@ return JOIN-ENV(let-env(child), FWD-ENV(env));
175175``` cpp
176176template <class Cpo , class Sndr, class Fn, class Rcvr, class ArgsVariant,
177177 class OpsVariant>
178- struct let-state {
179- using env_t = decltype(let-env(declval<Sndr >())); // exposition only
180- Fn fn; // exposition only
181- env_t env; // exposition only
182- ArgsVariant args; // exposition only
183- OpsVariant ops; // exposition only
184-
185- template<class Tag, class... Ts>
186- constexpr void impl(Rcvr& rcvr, Tag tag, Ts&&... ts) noexcept
187- { // exposition only
188- using args_t = decayed-tuple<Ts...>;
189- using receiver_type = receiver2<Rcvr, env_t>;
190- using sender_type = apply_result_t<Fn, args_t&>;
191- if constexpr (is_same_v<Tag, Cpo>) {
192- try {
193- auto& tuple = args.template emplace<args_t>(std::forward<Ts>(ts)...);
194- ops.template emplace<monostate>();
195- auto&& sndr = apply(std::move(fn), tuple);
196- using op_t = connect_result_t<sender_type, receiver_type>;
197- auto mkop2 = [&] {
198- return connect(std::forward<sender_type>(sndr),
199- receiver_type{rcvr, env});
200- };
201- auto& op = ops.template emplace<op_t>(emplace-from{mkop2});
202- start(op);
203- } catch (...) {
204- constexpr bool nothrow =
205- is_nothrow_constructible_v<args_t, Ts...> &&
206- is_nothrow_applicable_v<Fn, args_t&> &&
207- noexcept(
208- connect(
209- declval<sender_type>(),
210- receiver_type{rcvr, env}));
178+ struct let-state {
179+ using env_t = decltype(let-env(declval<Sndr >())); // exposition only
180+ Fn fn; // exposition only
181+ env_t env; // exposition only
182+ ArgsVariant args; // exposition only
183+ OpsVariant ops; // exposition only
184+
185+ template<class Tag, class... Ts>
186+ constexpr void impl(Rcvr& rcvr, Tag tag, Ts&&... ts) noexcept
187+ { // exposition only
188+ using args_t = decayed-tuple<Ts...>;
189+ using receiver_type = receiver2<Rcvr, env_t>;
190+ using sender_type = apply_result_t<Fn, args_t&>;
191+ if constexpr (is_same_v<Tag, Cpo>) {
192+ try {
193+ auto& tuple = args.template emplace<args_t>(std::forward<Ts >(ts)...);
194+ ops.template emplace<monostate >();
195+ auto&& sndr = apply(std::move(fn), tuple);
196+ using op_t = connect_result_t<sender_type, receiver_type>;
197+ auto mkop2 = [ &] {
198+ return connect(std::forward<sender_type>(sndr),
199+ receiver_type{rcvr, env});
200+ };
201+ auto& op = ops.template emplace<op_t>(emplace-from{mkop2});
202+ start(op);
203+ } catch (...) {
204+ constexpr bool nothrow =
205+ is_nothrow_constructible_v<args_t, Ts...> &&
206+ is_nothrow_applicable_v<Fn, args_t&> &&
207+ noexcept(
208+ connect(
209+ declval<sender_type>(),
210+ receiver_type{rcvr, env}));
211211 if constexpr (!nothrow) {
212212 set_error(std::move(rcvr), current_exception());
213213 }
0 commit comments