@@ -222,6 +222,7 @@ namespace exec {
222222 return __nest_operation_t <_Receiver>{
223223 __self.__scope_ , ((_Self&&) __self).__c_ , (_Receiver&&) __rcvr};
224224 }
225+
225226 template <__decays_to<__nest_sender> _Self, class _Env >
226227 friend auto tag_invoke (get_completion_signatures_t , _Self&&, _Env&&)
227228 -> completion_signatures_of_t<__copy_cvref_t<_Self, _Constrained>, __env_t<_Env>> {
@@ -597,10 +598,17 @@ namespace exec {
597598
598599 // //////////////////////////////////////////////////////////////////////////
599600 // async_scope::spawn implementation
601+ template <class _Env >
602+ using __spawn_env_t = __result_of<
603+ __join_env,
604+ _Env,
605+ __env::__prop<get_stop_token_t , in_place_stop_token>,
606+ __env::__prop<get_scheduler_t , __inln::__scheduler>>;
607+
600608 template <class _EnvId >
601609 struct __spawn_op_base {
602610 using _Env = __t <_EnvId>;
603- __env_t <_Env> __env_;
611+ __spawn_env_t <_Env> __env_;
604612 void (*__delete_)(__spawn_op_base*);
605613 };
606614
@@ -623,7 +631,7 @@ namespace exec {
623631 std::terminate ();
624632 }
625633
626- friend const __env_t <_Env>& tag_invoke (get_env_t , const __spawn_rcvr& __self) noexcept {
634+ friend const __spawn_env_t <_Env>& tag_invoke (get_env_t , const __spawn_rcvr& __self) noexcept {
627635 return __self.__op_ ->__env_ ;
628636 }
629637 };
@@ -638,8 +646,9 @@ namespace exec {
638646
639647 template <__decays_to<_Sender> _Sndr>
640648 __spawn_op (_Sndr&& __sndr, _Env __env, const __impl* __scope)
641- : __spawn_op_base<_EnvId>{make_env ((_Env&&) __env,
642- with (get_stop_token, __scope->__stop_source_ .get_token ())),
649+ : __spawn_op_base<_EnvId>{__join_env ((_Env&&) __env,
650+ __mkprop (get_stop_token, __scope->__stop_source_ .get_token ()),
651+ __mkprop (get_scheduler, __inln::__scheduler{})),
643652 [](__spawn_op_base<_EnvId>* __op) {
644653 delete static_cast <__spawn_op*>(__op);
645654 }}
@@ -682,7 +691,7 @@ namespace exec {
682691 return nest_result_t <_Constrained>{&__impl_, (_Constrained&&) __c};
683692 }
684693
685- template <__movable_value _Env = empty_env, sender_in<__env_t <_Env>> _Sender>
694+ template <__movable_value _Env = empty_env, sender_in<__spawn_env_t <_Env>> _Sender>
686695 requires sender_to<nest_result_t <_Sender>, __spawn_receiver_t <_Env>>
687696 void spawn (_Sender&& __sndr, _Env __env = {}) {
688697 using __op_t = __spawn_operation_t <nest_result_t <_Sender>, _Env>;
0 commit comments