1515 */
1616#pragma once
1717
18- #include " ../stdexec/__detail/__any_receiver_ref.hpp"
1918#include " ../stdexec/execution.hpp"
2019
2120#include " sequence_senders.hpp"
@@ -27,6 +26,26 @@ namespace exec {
2726 namespace __any {
2827 using namespace STDEXEC ;
2928
29+ template <class _Sig >
30+ struct __rcvr_vfun ;
31+
32+ template <class _Tag , class ... _Args>
33+ struct __rcvr_vfun <_Tag(_Args...)> {
34+ void (*__complete_)(void *, _Args...) noexcept ;
35+
36+ void operator ()(void * __obj, _Tag, _Args... __args) const noexcept {
37+ __complete_ (__obj, static_cast <_Args&&>(__args)...);
38+ }
39+ };
40+
41+ template <class _GetReceiver = std::identity, class _Obj , class _Tag , class ... _Args>
42+ constexpr auto __rcvr_vfun_fn (_Obj*, _Tag (*)(_Args...)) noexcept {
43+ return +[](void * __ptr, _Args... __args) noexcept {
44+ _Obj* __obj = static_cast <_Obj*>(__ptr);
45+ _Tag ()(std::move (_GetReceiver ()(*__obj)), static_cast <_Args&&>(__args)...);
46+ };
47+ }
48+
3049 struct __create_vtable_t {
3150 template <class _VTable , class _Tp >
3251 constexpr auto operator ()(__mtype<_VTable>, __mtype<_Tp>) const noexcept -> const _VTable* {
@@ -656,19 +675,19 @@ namespace exec {
656675 template <class ... _Sigs, class ... _Queries>
657676 struct __vtable <completion_signatures<_Sigs...>, _Queries...> {
658677 struct __t
659- : __overload<__any_:: __rcvr_vfun<_Sigs>...>
678+ : __overload<__rcvr_vfun<_Sigs>...>
660679 , __query_vfun<_Queries>... {
661680 using __query_vfun<_Queries>::operator ()...;
662681
663682 template <class _Tag , class ... _As>
664683 requires __one_of<_Tag(_As...), _Sigs...>
665- || __callable<__overload<__any_:: __rcvr_vfun<_Sigs>...>, void *, _Tag, _As...>
684+ || __callable<__overload<__rcvr_vfun<_Sigs>...>, void *, _Tag, _As...>
666685 void operator ()(void * __rcvr, _Tag, _As&&... __as) const noexcept {
667686 if constexpr (__one_of<_Tag (_As...), _Sigs...>) {
668- const __any_:: __rcvr_vfun<_Tag (_As...)>& __vfun = *this ;
687+ const __rcvr_vfun<_Tag (_As...)>& __vfun = *this ;
669688 __vfun (__rcvr, _Tag (), static_cast <_As&&>(__as)...);
670689 } else {
671- const __overload<__any_:: __rcvr_vfun<_Sigs>...>& __vfun = *this ;
690+ const __overload<__rcvr_vfun<_Sigs>...>& __vfun = *this ;
672691 __vfun (__rcvr, _Tag (), static_cast <_As&&>(__as)...);
673692 }
674693 }
@@ -678,7 +697,7 @@ namespace exec {
678697 && (__callable<__query_vfun_fn<_Rcvr>, _Queries> && ...)
679698 static auto __create_vtable (__mtype<_Rcvr>) noexcept -> const __t* {
680699 static const __t __vtable_{
681- {{__any_:: __rcvr_vfun_fn (
700+ {{__rcvr_vfun_fn (
682701 static_cast <_Rcvr*>(nullptr ), static_cast <_Sigs*>(nullptr ))}...},
683702 {__query_vfun_fn<_Rcvr>{}(static_cast <_Queries>(nullptr ))}...};
684703 return &__vtable_;
@@ -791,34 +810,34 @@ namespace exec {
791810
792811 template <class ... _As>
793812 requires __one_of<set_value_t (_As...), _Sigs...>
794- || __callable<__overload<__any_:: __rcvr_vfun<_Sigs>...>, void *, set_value_t , _As...>
813+ || __callable<__overload<__rcvr_vfun<_Sigs>...>, void *, set_value_t , _As...>
795814 void set_value (_As&&... __as) noexcept {
796815 if constexpr (__one_of<set_value_t (_As...), _Sigs...>) {
797- const __any_:: __rcvr_vfun<set_value_t (_As...)>& __vfun = *__env_.__vtable_ ;
816+ const __rcvr_vfun<set_value_t (_As...)>& __vfun = *__env_.__vtable_ ;
798817 __vfun (__env_.__rcvr_ , set_value_t (), static_cast <_As&&>(__as)...);
799818 } else {
800- const __overload<__any_:: __rcvr_vfun<_Sigs>...>& __vfun = *__env_.__vtable_ ;
819+ const __overload<__rcvr_vfun<_Sigs>...>& __vfun = *__env_.__vtable_ ;
801820 __vfun (__env_.__rcvr_ , set_value_t (), static_cast <_As&&>(__as)...);
802821 }
803822 }
804823
805824 template <class _Error >
806825 requires __one_of<set_error_t (_Error), _Sigs...>
807- || __callable<__overload<__any_:: __rcvr_vfun<_Sigs>...>, void *, set_error_t , _Error>
826+ || __callable<__overload<__rcvr_vfun<_Sigs>...>, void *, set_error_t , _Error>
808827 void set_error (_Error&& __err) noexcept {
809828 if constexpr (__one_of<set_error_t (_Error), _Sigs...>) {
810- const __any_:: __rcvr_vfun<set_error_t (_Error)>& __vfun = *__env_.__vtable_ ;
829+ const __rcvr_vfun<set_error_t (_Error)>& __vfun = *__env_.__vtable_ ;
811830 __vfun (__env_.__rcvr_ , set_error_t (), static_cast <_Error&&>(__err));
812831 } else {
813- const __overload<__any_:: __rcvr_vfun<_Sigs>...>& __vfun = *__env_.__vtable_ ;
832+ const __overload<__rcvr_vfun<_Sigs>...>& __vfun = *__env_.__vtable_ ;
814833 __vfun (__env_.__rcvr_ , set_error_t (), static_cast <_Error&&>(__err));
815834 }
816835 }
817836
818837 void set_stopped () noexcept
819838 requires __one_of<set_stopped_t (), _Sigs...>
820839 {
821- const __any_:: __rcvr_vfun<set_stopped_t ()>& __vfun = *__env_.__vtable_ ;
840+ const __rcvr_vfun<set_stopped_t ()>& __vfun = *__env_.__vtable_ ;
822841 __vfun (__env_.__rcvr_ , set_stopped_t ());
823842 }
824843
0 commit comments