@@ -236,6 +236,11 @@ namespace experimental::execution
236236 {
237237 using sender_concept = STDEXEC::sender_t ;
238238
239+ // Even without an Env, we can sometimes still determine the completion signatures
240+ // of the sequence sender. If any of the child senders has a
241+ // set_error(exception_ptr) completion, then the sequence sender has a
242+ // set_error(exception_ptr) completion. We don't have to ask if any connect call
243+ // throws.
239244 template <class Self , class ... Env>
240245 requires (sizeof ...(Env) > 0 )
241246 || __has_eptr_completion<STDEXEC::__copy_cvref_t <Self, Sender0>>
@@ -272,10 +277,10 @@ namespace experimental::execution
272277 template <STDEXEC::__decay_copyable Self, class Rcvr >
273278 STDEXEC_ATTRIBUTE (host, device)
274279 constexpr STDEXEC_EXPLICIT_THIS_BEGIN (auto connect)(this Self&& self, Rcvr rcvr)
275- noexcept (std::is_nothrow_constructible_v <
280+ noexcept (STDEXEC::__nothrow_constructible_from <
276281 _opstate<Rcvr, STDEXEC::__copy_cvref_t <Self, Sender0>, Senders...>,
277282 Rcvr,
278- decltype ((( Self&&) self)._sndrs)>)
283+ decltype ((static_cast < Self&&>( self)._sndrs) )>)
279284 {
280285 return _opstate<Rcvr, STDEXEC::__copy_cvref_t <Self, Sender0>, Senders...>{
281286 static_cast <Rcvr&&>(rcvr),
0 commit comments