@@ -118,8 +118,10 @@ namespace experimental::execution
118118 };
119119
120120 template <class Base >
121- using _inject_query_memfn_t =
122- __if_c<requires { typename Base::_has_query_memfn_t ; }, Base, _inject_query_memfn<Base>>;
121+ concept _has_query_memfn = requires { typename Base::_has_query_memfn_t ; };
122+
123+ template <class Base >
124+ using _inject_query_memfn_t = __if_c<_has_query_memfn<Base>, Base, _inject_query_memfn<Base>>;
123125
124126 template <class Base >
125127 struct _inject_receiver_memfns : Base
@@ -131,9 +133,11 @@ namespace experimental::execution
131133 };
132134
133135 template <class Base >
134- using _inject_receiver_memfns_t = __if_c<requires {
135- typename Base::_has_receiver_memfns_t ;
136- }, Base, _inject_receiver_memfns<Base>>;
136+ concept _has_receiver_memfns = requires { typename Base::_has_receiver_memfns_t ; };
137+
138+ template <class Base >
139+ using _inject_receiver_memfns_t =
140+ __if_c<_has_receiver_memfns<Base>, Base, _inject_receiver_memfns<Base>>;
137141
138142 template <class QuerySig , bool Indirect = true , bool Noexcept = false >
139143 struct _iquery_memfn ;
@@ -413,6 +417,7 @@ namespace experimental::execution
413417 struct _any_opstate_base final : STDEXEC::__any::__any<_iopstate>
414418 {
415419 using STDEXEC::__any::__any<_iopstate>::__any;
420+ STDEXEC_IMMOVABLE (_any_opstate_base);
416421 };
417422
418423 // ////////////////////////////////////////////////////////////////////////////////////
@@ -621,27 +626,29 @@ namespace experimental::execution
621626 noexcept (STDEXEC::__nothrow_constructible_from<typename any_receiver::__any, Receiver>)
622627 : any_receiver::__any{static_cast <Receiver &&>(_rcvr)}
623628 {}
629+
630+ private:
631+ template <class , class >
632+ friend struct any_sender ;
633+ using _completions_t = Sigs;
634+ using _queries_t = Queries;
624635 };
625636
626637 // ////////////////////////////////////////////////////////////////////////////////////
627638 // any_sender
628- template <class ... Sigs, class Queries , class SenderQueries >
629- struct any_sender <any_receiver<STDEXEC::completion_signatures<Sigs...>, Queries>, SenderQueries>
630- final
631- : STDEXEC::__any::__any<
632- _any::_isender<any_receiver<STDEXEC::completion_signatures<Sigs...>, Queries>,
633- SenderQueries>::template _interface_>
639+ template <class AnyReceiver , class SenderQueries >
640+ struct any_sender final
641+ : STDEXEC::__any::__any<_any::_isender<AnyReceiver, SenderQueries>::template _interface_>
634642 {
635643 private:
636- using _completions_t = STDEXEC::completion_signatures<Sigs...>;
637- using _any_receiver_t = any_receiver<_completions_t , Queries>;
638- using _stop_token_t = STDEXEC::stop_token_of_t <STDEXEC::env_of_t <_any_receiver_t >>;
639- using _isender_t = _any::_isender<_any_receiver_t , SenderQueries>;
640- using _base_t = STDEXEC::__any::__any<_isender_t ::template _interface_>;
644+ using _completions_t = AnyReceiver::_completions_t ;
645+ using _stop_token_t = STDEXEC::stop_token_of_t <STDEXEC::env_of_t <AnyReceiver>>;
646+ using _isender_t = _any::_isender<AnyReceiver, SenderQueries>;
647+ using _base_t = STDEXEC::__any::__any<_isender_t ::template _interface_>;
641648
642649 public:
643650 template <STDEXEC::__not_same_as<any_sender> Sender>
644- requires STDEXEC::sender_to<Sender, _any_receiver_t >
651+ requires STDEXEC::sender_to<Sender, AnyReceiver >
645652 constexpr any_sender (Sender _sndr)
646653 noexcept (STDEXEC::__nothrow_constructible_from<_base_t , Sender>)
647654 : _base_t{static_cast <Sender &&>(_sndr)}
0 commit comments