1717
1818#include " ../stdexec/execution.hpp"
1919#include " ../stdexec/__detail/__any_receiver_ref.hpp"
20+ #include " ../stdexec/__detail/__transform_completion_signatures.hpp"
2021
2122#include " sequence_senders.hpp"
2223
@@ -250,7 +251,8 @@ namespace exec {
250251 class _Allocator ,
251252 bool _Copyable = false ,
252253 std::size_t _InlineSize = 3 * sizeof (void *),
253- std::size_t _Alignment = alignof (std::max_align_t )>
254+ std::size_t _Alignment = alignof (std::max_align_t )
255+ >
254256 struct __storage {
255257 class __t ;
256258 };
@@ -259,7 +261,8 @@ namespace exec {
259261 class _Vtable ,
260262 class _Allocator ,
261263 std::size_t _InlineSize = 3 * sizeof (void *),
262- std::size_t _Alignment = alignof (std::max_align_t )>
264+ std::size_t _Alignment = alignof (std::max_align_t )
265+ >
263266 struct __immovable_storage {
264267 class __t : __immovable {
265268 static constexpr std::size_t __buffer_size = std::max(_InlineSize, sizeof (void *));
@@ -377,7 +380,8 @@ namespace exec {
377380 class _Allocator ,
378381 bool _Copyable,
379382 std::size_t _InlineSize,
380- std::size_t _Alignment>
383+ std::size_t _Alignment
384+ >
381385 class __storage <_Vtable, _Allocator, _Copyable, _InlineSize, _Alignment>::__t
382386 : __if_c<_Copyable, __, __move_only> {
383387 static_assert (
@@ -396,7 +400,8 @@ namespace exec {
396400 using __vtable_t = __if_c<
397401 _Copyable,
398402 __storage_vtable<_Vtable, __with_delete, __with_move, __with_copy>,
399- __storage_vtable<_Vtable, __with_delete, __with_move>>;
403+ __storage_vtable<_Vtable, __with_delete, __with_move>
404+ >;
400405
401406 template <class _Tp >
402407 static constexpr auto __get_vtable_of_type () noexcept -> const __vtable_t* {
@@ -407,7 +412,8 @@ namespace exec {
407412 _Vtable,
408413 __with_delete,
409414 __with_move,
410- __with_copy>;
415+ __with_copy
416+ >;
411417 } else {
412418 return &__storage_vtbl<__t , __decay_t <_Tp>, _Vtable, __with_delete, __with_move>;
413419 }
@@ -584,7 +590,8 @@ namespace exec {
584590 class _VTable = __empty_vtable,
585591 class _Allocator = std::allocator<std::byte>,
586592 std::size_t _InlineSize = 3 * sizeof (void *),
587- std::size_t _Alignment = alignof (std::max_align_t )>
593+ std::size_t _Alignment = alignof (std::max_align_t )
594+ >
588595 using __immovable_storage_t =
589596 __t <__immovable_storage<_VTable, _Allocator, _InlineSize, _Alignment>>;
590597
@@ -594,7 +601,8 @@ namespace exec {
594601 template <
595602 class _VTable ,
596603 std::size_t _InlineSize = 3 * sizeof (void *),
597- class _Allocator = std::allocator<std::byte>>
604+ class _Allocator = std::allocator<std::byte>
605+ >
598606 using __copyable_storage_t = __t <__storage<_VTable, _Allocator, true , _InlineSize>>;
599607
600608 template <class _Tag , class ... _As>
@@ -747,7 +755,8 @@ namespace exec {
747755 using _FilteredQueries =
748756 __minvoke<__mremove_if<__q<__is_never_stop_token_query>>, _Queries...>;
749757 using __vtable_t = stdexec::__t <
750- __mapply<__mbind_front_q<__vtable, completion_signatures<_Sigs...>>, _FilteredQueries>>;
758+ __mapply<__mbind_front_q<__vtable, completion_signatures<_Sigs...>>, _FilteredQueries>
759+ >;
751760
752761 struct __env_t {
753762 const __vtable_t * __vtable_;
@@ -850,7 +859,8 @@ namespace exec {
850859 STDEXEC_ATTRIBUTE (no_unique_address) _Receiver __rcvr_;
851860 stdexec::inplace_stop_source __stop_source_{};
852861 using __stop_callback = typename stdexec::stop_token_of_t <
853- stdexec::env_of_t <_Receiver>>::template callback_type<__on_stop_t >;
862+ stdexec::env_of_t <_Receiver>
863+ >::template callback_type<__on_stop_t >;
854864 std::optional<__stop_callback> __on_stop_{};
855865 };
856866
@@ -1060,7 +1070,8 @@ namespace exec {
10601070
10611071 template <receiver_of<_Sigs> _Rcvr>
10621072 auto connect (_Rcvr __rcvr) && -> stdexec::__t<
1063- __operation<stdexec::__id<_Rcvr>, __with_inplace_stop_token>> {
1073+ __operation<stdexec::__id<_Rcvr>, __with_inplace_stop_token>
1074+ > {
10641075 return {static_cast <__t &&>(*this ), static_cast <_Rcvr&&>(__rcvr)};
10651076 }
10661077
@@ -1211,19 +1222,15 @@ namespace exec {
12111222 template <auto ... _SenderQueries>
12121223 class any_sender {
12131224 using __sender_base = stdexec::__t <
1214- __any::__sender<_Completions, queries<_SenderQueries...>, queries<_ReceiverQueries...>>>;
1225+ __any::__sender<_Completions, queries<_SenderQueries...>, queries<_ReceiverQueries...>>
1226+ >;
12151227 __sender_base __sender_;
12161228
1217- template <class _Tag , stdexec::__decays_to<any_sender> Self, class ... _As>
1218- requires stdexec::tag_invocable<_Tag, stdexec::__copy_cvref_t <Self, __sender_base>, _As...>
1219- friend auto tag_invoke (_Tag, Self&& __self, _As&&... __as) noexcept (
1220- stdexec::nothrow_tag_invocable<_Tag, stdexec::__copy_cvref_t <Self, __sender_base>, _As...>) {
1221- return stdexec::tag_invoke (
1222- _Tag{}, static_cast <Self&&>(__self).__sender_ , static_cast <_As&&>(__as)...);
1223- }
12241229 public:
12251230 using sender_concept = stdexec::sender_t ;
12261231 using completion_signatures = typename __sender_base::completion_signatures;
1232+ using __t = any_sender;
1233+ using __id = any_sender;
12271234
12281235 template <stdexec::__not_decays_to<any_sender> _Sender>
12291236 requires stdexec::sender_to<_Sender, __receiver_base>
@@ -1237,12 +1244,17 @@ namespace exec {
12371244 return static_cast <__sender_base&&>(__sender_).connect (static_cast <_Receiver&&>(__rcvr));
12381245 }
12391246
1247+ auto get_env () const noexcept -> stdexec::env_of_t<__sender_base> {
1248+ return static_cast <const __sender_base&>(__sender_).get_env ();
1249+ }
1250+
12401251 template <auto ... _SchedulerQueries>
12411252 class any_scheduler {
12421253 // Add the required set_value_t() completions to the schedule-sender.
12431254 using __schedule_completions = stdexec::__concat_completion_signatures<
12441255 _Completions,
1245- stdexec::completion_signatures<stdexec::set_value_t ()>>;
1256+ stdexec::completion_signatures<stdexec::set_value_t ()>
1257+ >;
12461258 using __schedule_receiver = any_receiver_ref<__schedule_completions, _ReceiverQueries...>;
12471259
12481260 template <typename _Tag, typename _Sig>
@@ -1257,8 +1269,10 @@ namespace exec {
12571269
12581270 using __schedule_sender_queries = stdexec::__minvoke<
12591271 stdexec::__mremove_if<
1260- __ret_equals_to<stdexec::get_completion_scheduler_t <stdexec::set_value_t >>>,
1261- decltype (_SenderQueries)...>;
1272+ __ret_equals_to<stdexec::get_completion_scheduler_t <stdexec::set_value_t >>
1273+ >,
1274+ decltype (_SenderQueries)...
1275+ >;
12621276
12631277#if STDEXEC_MSVC()
12641278 // MSVCBUG https://developercommunity.visualstudio.com/t/ICE-and-non-ICE-bug-in-NTTP-argument-w/10361081
@@ -1271,7 +1285,8 @@ namespace exec {
12711285#else
12721286 template <class ... _Queries>
12731287 using __schedule_sender_fn = typename __schedule_receiver::template any_sender<
1274- stdexec::get_completion_scheduler<stdexec::set_value_t >.template signature<any_scheduler() noexcept >>;
1288+ stdexec::get_completion_scheduler<stdexec::set_value_t >.template signature<any_scheduler() noexcept >
1289+ >;
12751290#endif
12761291 using __schedule_sender =
12771292 stdexec::__mapply<stdexec::__q<__schedule_sender_fn>, __schedule_sender_queries>;
@@ -1282,6 +1297,7 @@ namespace exec {
12821297 __scheduler_base __scheduler_;
12831298
12841299 public:
1300+ using scheduler_concept = stdexec::scheduler_t ;
12851301 using __t = any_scheduler;
12861302 using __id = any_scheduler;
12871303
@@ -1296,11 +1312,11 @@ namespace exec {
12961312 }
12971313
12981314 template <class _Tag , class ... _As>
1299- requires stdexec::tag_invocable<_Tag, const __scheduler_base&, _As...>
1315+ requires stdexec::__env::__queryable< const __scheduler_base&, _Tag , _As...>
13001316 auto query (_Tag, _As&&... __as) const
1301- noexcept (stdexec::nothrow_tag_invocable<_Tag, const __scheduler_base&, _As...>)
1302- -> stdexec::tag_invoke_result_t<_Tag, const __scheduler_base&, _As...> {
1303- return stdexec::tag_invoke (_Tag (), __scheduler_ , static_cast <_As&&>(__as)...);
1317+ noexcept (stdexec::__env::__nothrow_queryable< const __scheduler_base&, _Tag , _As...>)
1318+ -> stdexec::__env::__query_result_t< const __scheduler_base&, _Tag , _As...> {
1319+ return __scheduler_. query (_Tag{} , static_cast <_As&&>(__as)...);
13041320 }
13051321
13061322 auto operator ==(const any_scheduler&) const noexcept -> bool = default ;
0 commit comments