@@ -5923,93 +5923,67 @@ namespace stdexec {
59235923 };
59245924 };
59255925
5926- template <class _SenderId >
5927- struct __sender {
5928- using _Sender = stdexec::__t <_SenderId>;
5929-
5930- template <class _Env >
5931- using __variant_t = __try_value_types_of_t <_Sender, _Env>;
5932-
5933- template <class _Receiver >
5934- using __receiver_t = //
5935- stdexec::__t < __receiver<__id<_Receiver>, __variant_t <env_of_t <_Receiver>>>>;
5936-
5937- struct __t {
5938- using __id = __sender;
5939- using is_sender = void ;
5940-
5941- template <__decays_to<_Sender> _CvrefSender>
5942- explicit __t (_CvrefSender&& __sndr)
5943- : __sndr_((_CvrefSender&&) __sndr) {
5944- }
5945-
5946- private:
5947- template <class ...>
5948- using __set_value_t = completion_signatures<>;
5949-
5950- template <class _Variant >
5951- using __variant_completions =
5952- completion_signatures< set_value_t (_Variant), set_error_t (std::exception_ptr)>;
5953-
5954- template <class _Env >
5955- using __compl_sigs = //
5956- __try_make_completion_signatures<
5957- _Sender,
5958- _Env,
5959- __meval<__variant_completions, __variant_t <_Env>>,
5960- __q<__set_value_t >>;
5961-
5962- _Sender __sndr_;
5926+ template <class _Sender , class _Env >
5927+ using __variant_t = __try_value_types_of_t <_Sender, _Env>;
59635928
5964- template <receiver _Receiver>
5965- requires sender_to<_Sender, __receiver_t <_Receiver>>
5966- friend auto tag_invoke (connect_t , __t && __self, _Receiver __rcvr) //
5967- noexcept (__nothrow_connectable<_Sender, __receiver_t <_Receiver>>)
5968- -> connect_result_t<_Sender, __receiver_t<_Receiver>> {
5969- return stdexec::connect (
5970- (_Sender&&) __self.__sndr_ , __receiver_t <_Receiver>{(_Receiver&&) __rcvr});
5971- }
5929+ template <class _Sender , class _Receiver >
5930+ using __receiver_t = //
5931+ stdexec::__t < __receiver<__id<_Receiver>, __variant_t <_Sender, env_of_t <_Receiver>>>>;
59725932
5973- friend auto tag_invoke ( get_env_t , const __t & __self) noexcept -> env_of_t< const _Sender&> {
5974- return get_env (__self. __sndr_ );
5975- }
5933+ template < class _Variant >
5934+ using __variant_completions =
5935+ completion_signatures< set_value_t (_Variant), set_error_t (std::exception_ptr)>;
59765936
5977- template <class _Env >
5978- friend auto tag_invoke ( get_completion_signatures_t , __t &&, _Env&&) //
5979- -> __compl_sigs<_Env> {
5980- return {};
5981- }
5982- };
5983- } ;
5937+ template <class _Sender , class _Env >
5938+ using __compl_sigs = //
5939+ __try_make_completion_signatures<
5940+ _Sender,
5941+ _Env,
5942+ __meval<__variant_completions, __variant_t <_Sender, _Env>>,
5943+ __mconst<completion_signatures<>>> ;
59845944
5985- struct into_variant_t {
5945+ struct into_variant_t : __default_get_env< into_variant_t > {
59865946 template <sender _Sender>
5987- auto operator ()(_Sender&& __sndr) const -> __t<__sender<stdexec::__id<__decay_t<_Sender>>>> {
5988- return __t <__sender<stdexec::__id<__decay_t <_Sender>>>>{(_Sender&&) __sndr};
5947+ auto operator ()(_Sender&& __sndr) const {
5948+ auto __domain = __get_sender_domain (__sndr);
5949+ return transform_sender (
5950+ __domain, make_sender_expr<into_variant_t >(__ (), std::move (__sndr)));
59895951 }
59905952
59915953 auto operator ()() const noexcept {
59925954 return __binder_back<into_variant_t >{};
59935955 }
5956+
5957+ #if STDEXEC_FRIENDSHIP_IS_LEXICAL()
5958+ private:
5959+ template <class ...>
5960+ friend struct stdexec ::__sexpr;
5961+ #endif
5962+
5963+ template <sender_expr_for<into_variant_t > _Self, receiver _Receiver>
5964+ requires sender_to<__child_of<_Self>, __receiver_t <__child_of<_Self>, _Receiver>>
5965+ static auto connect (_Self&& __self, _Receiver __rcvr) //
5966+ noexcept (
5967+ __nothrow_connectable<__child_of<_Self>, __receiver_t <__child_of<_Self>, _Receiver>>)
5968+ -> connect_result_t<__child_of<_Self>, __receiver_t<__child_of<_Self>, _Receiver>> {
5969+ return apply_sender (
5970+ (_Self&&) __self, [&]<class _Child >(__ignore, __ignore, _Child&& __child) {
5971+ return stdexec::connect (
5972+ (_Child&&) __child, __receiver_t <_Child, _Receiver>{(_Receiver&&) __rcvr});
5973+ });
5974+ }
5975+
5976+ template <sender_expr_for<into_variant_t > _Self, class _Env >
5977+ static auto get_completion_signatures (_Self&&, _Env&&) //
5978+ -> __compl_sigs<__child_of<_Self>, _Env> {
5979+ return {};
5980+ }
59945981 };
59955982 } // namespace __into_variant
59965983
59975984 using __into_variant::into_variant_t ;
59985985 inline constexpr into_variant_t into_variant{};
59995986
6000- // Temporary until we migrate into_variant() to use __sexpr:
6001- namespace __detail {
6002- struct __into_variant_sender_name {
6003- template <class _Sender >
6004- using __f = __mapply<
6005- __transform< __mcompose<__q<__name_of>, __q<__t >>, __q<__into_variant::__sender>>,
6006- _Sender>;
6007- };
6008-
6009- template <class _SenderId >
6010- extern __into_variant_sender_name __name_of_v<__into_variant::__sender<_SenderId>>;
6011- }
6012-
60135987 // ///////////////////////////////////////////////////////////////////////////
60145988 // [execution.senders.adaptors.when_all]
60155989 // [execution.senders.adaptors.when_all_with_variant]
0 commit comments