@@ -30,20 +30,23 @@ namespace exec {
3030 struct _dematerialize_fn {
3131 struct _impl_fn {
3232 template <class Rcvr , class Tag , class ... Args>
33- STDEXEC_ATTRIBUTE ((always_inline, host, device)) void operator ()(Rcvr& rcvr, Tag, const Args&... args) const noexcept {
33+ STDEXEC_ATTRIBUTE ((always_inline, host, device))
34+ void operator ()(Rcvr& rcvr, Tag, const Args&... args) const noexcept {
3435 Tag{}(static_cast <Rcvr&&>(rcvr), args...);
3536 }
3637 };
3738
3839 template <class Rcvr , class Tuple >
39- STDEXEC_ATTRIBUTE ((always_inline, host, device)) void operator ()(Rcvr& rcvr, const Tuple& tupl) const noexcept {
40+ STDEXEC_ATTRIBUTE ((always_inline, host, device))
41+ void operator ()(Rcvr& rcvr, const Tuple& tupl) const noexcept {
4042 tupl.apply (_impl_fn{}, tupl, rcvr);
4143 }
4244 };
4345
4446 struct _mk_when_all_fn {
4547 template <class CacheSndr , class ... Closures>
46- STDEXEC_ATTRIBUTE ((always_inline, host, device)) auto operator ()(CacheSndr sndr, Closures&&... closures) const {
48+ STDEXEC_ATTRIBUTE ((always_inline, host, device))
49+ auto operator ()(CacheSndr sndr, Closures&&... closures) const {
4750 return stdexec::when_all (static_cast <Closures&&>(closures)(sndr)...);
4851 }
4952 };
@@ -61,7 +64,8 @@ namespace exec {
6164
6265 template <class Domain >
6366 struct _env_t {
64- STDEXEC_ATTRIBUTE ((always_inline, host, device)) static constexpr auto query (stdexec::get_domain_t ) noexcept -> Domain {
67+ STDEXEC_ATTRIBUTE ((always_inline, host, device))
68+ static constexpr auto query (stdexec::get_domain_t ) noexcept -> Domain {
6569 return {};
6670 }
6771 };
@@ -93,12 +97,14 @@ namespace exec {
9397 };
9498
9599 template <class _Self , class ... _Env>
96- STDEXEC_ATTRIBUTE ((host, device)) static auto get_completion_signatures (_Self&&, _Env&&...) noexcept {
100+ STDEXEC_ATTRIBUTE ((host, device))
101+ static auto get_completion_signatures (_Self&&, _Env&&...) noexcept {
97102 return stdexec::__mapply<stdexec::__qq<_cache_sndr_completions_t >, Variant>{};
98103 }
99104
100105 template <class Rcvr >
101- STDEXEC_ATTRIBUTE ((host, device)) auto connect (Rcvr rcvr) const -> _opstate_t<Rcvr> {
106+ STDEXEC_ATTRIBUTE ((host, device))
107+ auto connect (Rcvr rcvr) const -> _opstate_t<Rcvr> {
102108 return _opstate_t <Rcvr>{static_cast <Rcvr&&>(rcvr), _results_};
103109 }
104110
@@ -117,7 +123,7 @@ namespace exec {
117123 struct _opstate_t {
118124 using operation_state_concept = stdexec::operation_state_t ;
119125 using _env_t = stdexec::__call_result_t <stdexec::__env::__fwd_fn, stdexec::env_of_t <Rcvr>>;
120- using _child_completions_t = stdexec::completion_signatures_of_t <Sndr, _env_t >;
126+ using _child_completions_t = stdexec::__completion_signatures_of_t <Sndr, _env_t >;
121127 using _domain_t = stdexec::__early_domain_of_t <Sndr, stdexec::__none_such>;
122128 using _when_all_sndr_t = fork_t ::_when_all_sndr_t <_child_completions_t , Closures, _domain_t >;
123129 using _child_opstate_t =
@@ -126,7 +132,8 @@ namespace exec {
126132 stdexec::connect_result_t <_when_all_sndr_t , stdexec::__rcvr_ref_t <Rcvr>>;
127133 using _cache_sndr_t = fork_t ::_cache_sndr_t <_variant_t <_child_completions_t >, _domain_t >;
128134
129- STDEXEC_ATTRIBUTE ((host, device)) explicit _opstate_t (Sndr&& sndr, Closures&& closures, Rcvr rcvr) noexcept
135+ STDEXEC_ATTRIBUTE ((host, device))
136+ explicit _opstate_t (Sndr&& sndr, Closures&& closures, Rcvr rcvr) noexcept
130137 : _rcvr_(static_cast <Rcvr&&>(rcvr))
131138 , _fork_opstate_(
132139 stdexec::connect (
@@ -153,7 +160,8 @@ namespace exec {
153160 }
154161
155162 template <class Tag , class ... Args>
156- STDEXEC_ATTRIBUTE ((host, device)) void _complete (Tag, Args&&... args) noexcept {
163+ STDEXEC_ATTRIBUTE ((host, device))
164+ void _complete (Tag, Args&&... args) noexcept {
157165 try {
158166 using _tuple_t = stdexec::__decayed_tuple<Tag, Args...>;
159167 _cache_.template emplace <_tuple_t >(Tag{}, static_cast <Args&&>(args)...);
@@ -169,20 +177,23 @@ namespace exec {
169177 }
170178
171179 template <class ... Values>
172- STDEXEC_ATTRIBUTE ((always_inline, host, device)) void set_value (Values&&... values) noexcept {
180+ STDEXEC_ATTRIBUTE ((always_inline, host, device))
181+ void set_value (Values&&... values) noexcept {
173182 this ->_complete (stdexec::set_value, static_cast <Values&&>(values)...);
174183 }
175184
176185 template <class Error >
177- STDEXEC_ATTRIBUTE ((always_inline, host, device)) void set_error (Error&& err) noexcept {
186+ STDEXEC_ATTRIBUTE ((always_inline, host, device))
187+ void set_error (Error&& err) noexcept {
178188 this ->_complete (stdexec::set_error, static_cast <Error&&>(err));
179189 }
180190
181191 STDEXEC_ATTRIBUTE ((always_inline, host, device)) void set_stopped () noexcept {
182192 this ->_complete (stdexec::set_stopped);
183193 }
184194
185- STDEXEC_ATTRIBUTE ((nodiscard, host, device)) constexpr auto get_env () const noexcept //
195+ STDEXEC_ATTRIBUTE ((nodiscard, host, device))
196+ constexpr auto get_env () const noexcept //
186197 -> stdexec::__fwd_env_t<stdexec::env_of_t<Rcvr>> {
187198 return stdexec::__env::__fwd_fn{}(stdexec::get_env (_rcvr_));
188199 }
@@ -198,7 +209,8 @@ namespace exec {
198209 using _closures_t = stdexec::__tuple_for<Closures...>;
199210
200211 template <class Sndr >
201- STDEXEC_ATTRIBUTE ((host, device)) friend constexpr auto operator |(Sndr sndr, _closure_t self) noexcept //
212+ STDEXEC_ATTRIBUTE ((host, device))
213+ friend constexpr auto operator |(Sndr sndr, _closure_t self) noexcept //
202214 -> _sndr_t <Sndr, Closures...> {
203215 return _sndr_t <Sndr, Closures...>{
204216 {}, static_cast <_closures_t &&>(self._closures_ ), static_cast <Sndr&&>(sndr)};
@@ -209,13 +221,15 @@ namespace exec {
209221
210222 template <class Sndr , class ... Closures>
211223 requires stdexec::sender<Sndr>
212- STDEXEC_ATTRIBUTE ((host, device)) auto operator ()(Sndr sndr, Closures... closures) const -> _sndr_t<Sndr, Closures...> {
224+ STDEXEC_ATTRIBUTE ((host, device))
225+ auto operator ()(Sndr sndr, Closures... closures) const -> _sndr_t<Sndr, Closures...> {
213226 return {{}, {static_cast <Closures&&>(closures)...}, static_cast <Sndr&&>(sndr)};
214227 }
215228
216229 template <class ... Closures>
217230 requires ((!stdexec::sender<Closures>) && ...)
218- STDEXEC_ATTRIBUTE ((host, device)) auto operator ()(Closures... closures) const -> _closure_t<Closures...> {
231+ STDEXEC_ATTRIBUTE ((host, device))
232+ auto operator ()(Closures... closures) const -> _closure_t<Closures...> {
219233 return {{static_cast <Closures&&>(closures)...}};
220234 }
221235 };
@@ -229,14 +243,17 @@ namespace exec {
229243 using _closures_t = stdexec::__tuple_for<Closures...>;
230244
231245 template <class Self , class ... Env>
232- STDEXEC_ATTRIBUTE ((host, device)) static auto get_completion_signatures (Self&&, Env&&...) noexcept {
246+ STDEXEC_ATTRIBUTE ((host, device))
247+ static auto get_completion_signatures (Self&&, Env&&...) noexcept {
233248 using namespace stdexec ;
234249 using _domain_t = __early_domain_of_t <Sndr, __none_such>;
235250 using _child_t = __copy_cvref_t <Self, Sndr>;
236- using _child_completions_t = completion_signatures_of_t <_child_t , __fwd_env_t <Env>...>;
251+ using _child_completions_t = __completion_signatures_of_t <_child_t , __fwd_env_t <Env>...>;
237252 using __decay_copyable_results_t = stdexec::__decay_copyable_results_t <_child_completions_t >;
238253
239- if constexpr (!__decay_copyable_results_t ::value) {
254+ if constexpr (!stdexec::__valid_completion_signatures<_child_completions_t >) {
255+ return _child_completions_t {};
256+ } else if constexpr (!__decay_copyable_results_t ::value) {
240257 return _ERROR_<
241258 _WHAT_<>(PREDECESSOR_RESULTS_ARE_NOT_DECAY_COPYABLE),
242259 _IN_ALGORITHM_ (exec::fork_t )>();
@@ -247,20 +264,23 @@ namespace exec {
247264 }
248265
249266 template <class Rcvr >
250- STDEXEC_ATTRIBUTE ((host, device)) auto connect (Rcvr rcvr) && -> _opstate_t<Sndr, _closures_t, Rcvr> {
267+ STDEXEC_ATTRIBUTE ((host, device))
268+ auto connect (Rcvr rcvr) && -> _opstate_t<Sndr, _closures_t, Rcvr> {
251269 return _opstate_t <Sndr, _closures_t , Rcvr>{
252270 static_cast <Sndr&&>(sndr_),
253271 static_cast <_closures_t &&>(_closures_),
254272 static_cast <Rcvr&&>(rcvr)};
255273 }
256274
257275 template <class Rcvr >
258- STDEXEC_ATTRIBUTE ((host, device)) auto connect (Rcvr rcvr) const & -> _opstate_t<Sndr const &, _closures_t const &, Rcvr> {
276+ STDEXEC_ATTRIBUTE ((host, device))
277+ auto connect (Rcvr rcvr) const & -> _opstate_t<Sndr const &, _closures_t const &, Rcvr> {
259278 return _opstate_t <Sndr const &, _closures_t const &, Rcvr>{
260279 sndr_, _closures_, static_cast <Rcvr&&>(rcvr)};
261280 }
262281
263- STDEXEC_ATTRIBUTE ((host, device)) constexpr auto get_env () const noexcept -> stdexec::__fwd_env_t<stdexec::env_of_t<Sndr>> {
282+ STDEXEC_ATTRIBUTE ((host, device))
283+ constexpr auto get_env () const noexcept -> stdexec::__fwd_env_t<stdexec::env_of_t<Sndr>> {
264284 return stdexec::__env::__fwd_fn{}(stdexec::get_env (sndr_));
265285 }
266286
0 commit comments