@@ -98,7 +98,8 @@ namespace exec {
9898 // / The execution domain of the parallel_scheduler, used for the purposes of customizing
9999 // / sender algorithms such as `bulk_chunked` and `bulk_unchunked`.
100100 struct __parallel_scheduler_domain : stdexec::default_domain {
101- // / Schedules new bulk chunked work.
101+ template <__bulk_chunked_or_unchunked _Sender>
102+ auto transform_sender (_Sender&& __sndr) const noexcept ;
102103 template <__bulk_chunked_or_unchunked _Sender, class _Env >
103104 auto transform_sender (_Sender&& __sndr, const _Env& __env) const noexcept ;
104105 };
@@ -706,6 +707,22 @@ namespace exec {
706707 using sender_concept = stdexec::sender_t ;
707708 };
708709
710+ template <__bulk_chunked_or_unchunked _Sender>
711+ auto __parallel_scheduler_domain::transform_sender (_Sender&& __sndr)
712+ const noexcept {
713+ if constexpr (stdexec::__completes_on<_Sender, parallel_scheduler>) {
714+ auto __sched = stdexec::get_completion_scheduler<stdexec::set_value_t >(
715+ stdexec::get_env (__sndr));
716+ return stdexec::__sexpr_apply (
717+ static_cast <_Sender&&>(__sndr), __transform_parallel_bulk_sender{__sched});
718+ } else {
719+ static_assert (
720+ stdexec::__completes_on<_Sender, parallel_scheduler>,
721+ " No parallel_scheduler instance can be found in the sender's "
722+ " environment on which to schedule bulk work." );
723+ return __not_a_sender<stdexec::__name_of<_Sender>>();
724+ }
725+ }
709726 template <__bulk_chunked_or_unchunked _Sender, class _Env >
710727 auto __parallel_scheduler_domain::transform_sender (_Sender&& __sndr, const _Env& __env)
711728 const noexcept {
0 commit comments