@@ -116,9 +116,10 @@ namespace nvexec::_strm {
116116 };
117117 } // namespace _continues_on
118118
119- template <class SenderId >
119+ template <class Scheduler , class SenderId >
120120 struct continues_on_sender_t {
121121 using Sender = stdexec::__t <SenderId>;
122+ using LateDomain = __detail::__early_domain_of_t <Sender, __none_such>;
122123
123124 struct __t : stream_sender_base {
124125 using __id = continues_on_sender_t ;
@@ -128,6 +129,7 @@ namespace nvexec::_strm {
128129 stdexec::__t <
129130 _continues_on::operation_state_t <__cvref_id<Self, Sender>, stdexec::__id<Receiver>>>;
130131
132+ Scheduler sched_;
131133 context_state_t context_state_;
132134 Sender sndr_;
133135
@@ -155,17 +157,18 @@ namespace nvexec::_strm {
155157 }
156158
157159 template <__decays_to<__t > Self, class ... Env>
158- static auto
159- get_completion_signatures (Self&&, Env&&...) -> _completion_signatures_t <Self, Env...> {
160+ static auto get_completion_signatures (Self&&, Env&&...) //
161+ -> _completion_signatures_t<Self, Env...> {
160162 return {};
161163 }
162164
163- auto get_env () const noexcept -> env_of_t< const Sender& > {
164- return stdexec::get_env (sndr_) ;
165+ auto get_env () const noexcept -> __sched_attrs<Scheduler, LateDomain > {
166+ return {sched_, {}} ;
165167 }
166168
167- __t (context_state_t context_state, Sender sndr)
168- : context_state_(context_state)
169+ __t (Scheduler sched, context_state_t context_state, Sender sndr)
170+ : sched_(sched)
171+ , context_state_(context_state)
169172 , sndr_{static_cast <Sender&&>(sndr)} {
170173 }
171174 };
@@ -180,18 +183,18 @@ namespace nvexec::_strm {
180183 template <class Sched , class Sender >
181184 requires gpu_stream_scheduler<_current_scheduler_t <Sender>>
182185 auto operator ()(__ignore, Sched sched, Sender&& sndr) const {
183- using _sender_t = __t <continues_on_sender_t <__id<__decay_t <Sender>>>>;
186+ using _sender_t = __t <continues_on_sender_t <Sched, __id<__decay_t <Sender>>>>;
184187 auto stream_sched = get_completion_scheduler<set_value_t >(get_env (sndr));
185188 return schedule_from (
186189 static_cast <Sched&&>(sched),
187- _sender_t {stream_sched.context_state_ , static_cast <Sender&&>(sndr)});
190+ _sender_t {sched, stream_sched.context_state_ , static_cast <Sender&&>(sndr)});
188191 }
189192 };
190193
191194} // namespace nvexec::_strm
192195
193196namespace stdexec ::__detail {
194- template <class SenderId >
195- inline constexpr __mconst<nvexec::_strm::continues_on_sender_t <__name_of<__t <SenderId>>>>
196- __name_of_v<nvexec::_strm::continues_on_sender_t <SenderId>>{};
197+ template <class Scheduler , class SenderId >
198+ inline constexpr __mconst<nvexec::_strm::continues_on_sender_t <Scheduler, __name_of<__t <SenderId>>>>
199+ __name_of_v<nvexec::_strm::continues_on_sender_t <Scheduler, SenderId>>{};
197200} // namespace stdexec::__detail
0 commit comments