@@ -776,51 +776,51 @@ namespace STDEXEC
776776
777777#else
778778
779- # define STDEXEC_EXPLICIT_THIS_BEGIN (...) \
780- static STDEXEC_PP_EXPAND (STDEXEC_PP_CAT (STDEXEC_EXPLICIT_THIS_MANGLE_, __VA_ARGS__) \
781- STDEXEC_PP_RPAREN) STDEXEC_PP_LPAREN STDEXEC_EXPLICIT_THIS_ARGS
779+ # define STDEXEC_EXPLICIT_THIS_CALL_OPERATOR_PROBE_operator () STDEXEC_PP_PROBE(~, 1 )
780+
781+ # define STDEXEC_EXPLICIT_THIS_CALL_OPERATOR_PROBE (_NAME ) \
782+ STDEXEC_PP_CHECK (STDEXEC_PP_CAT (STDEXEC_EXPLICIT_THIS_CALL_OPERATOR_PROBE_, _NAME))
783+
784+ # define STDEXEC_EXPLICIT_THIS_MANGLE (_NAME ) \
785+ STDEXEC_PP_CAT (__static_, \
786+ STDEXEC_PP_IIF (STDEXEC_EXPLICIT_THIS_CALL_OPERATOR_PROBE (_NAME), \
787+ _call, \
788+ _NAME))
789+
790+ # define STDEXEC_EXPLICIT_THIS_EAT_this
791+ # define STDEXEC_EXPLICIT_THIS_MANGLE_auto auto STDEXEC_EXPLICIT_THIS_MANGLE STDEXEC_PP_LPAREN
792+ # define STDEXEC_EXPLICIT_THIS_MANGLE_void void STDEXEC_EXPLICIT_THIS_MANGLE STDEXEC_PP_LPAREN
793+ # define STDEXEC_EXPLICIT_THIS_MANGLE_bool bool STDEXEC_EXPLICIT_THIS_MANGLE STDEXEC_PP_LPAREN
782794
783795# define STDEXEC_EXPLICIT_THIS_ARGS (...) \
784796 STDEXEC_PP_CAT (STDEXEC_EXPLICIT_THIS_EAT_, __VA_ARGS__) STDEXEC_PP_RPAREN
785797
786- # define STDEXEC_EXPLICIT_THIS_END (_FN ) \
798+ # define STDEXEC_EXPLICIT_THIS_BEGIN (...) \
799+ static STDEXEC_PP_EXPAND (STDEXEC_PP_CAT (STDEXEC_EXPLICIT_THIS_MANGLE_, __VA_ARGS__) \
800+ STDEXEC_PP_RPAREN) STDEXEC_PP_LPAREN STDEXEC_EXPLICIT_THIS_ARGS
801+
802+ # define STDEXEC_EXPLICIT_THIS_END (_NAME ) \
787803 template <class ... _Ts> \
788- STDEXEC_ATTRIBUTE (always_inline) \
789- auto _FN (_Ts&&... __args) && STDEXEC_AUTO_RETURN \
804+ STDEXEC_ATTRIBUTE (always_inline, host, device) \
805+ auto _NAME (_Ts&&... __args) && STDEXEC_AUTO_RETURN \
790806 ( \
791- decltype (STDEXEC::__get_self<_Ts...>(*this )) \
792- ::STDEXEC_PP_CAT (static_, _FN)(std::move(*this ), static_cast<_Ts&&>(__args)...) \
807+ STDEXEC_EXPLICIT_THIS_MANGLE (_NAME)(std::move (*this ), static_cast <_Ts&&>(__args)...) \
793808 ) \
794809 \
795810 template <class ... _Ts> \
796- STDEXEC_ATTRIBUTE(always_inline) \
797- auto _FN (_Ts&&... __args) & STDEXEC_AUTO_RETURN \
811+ STDEXEC_ATTRIBUTE (always_inline, host, device) \
812+ auto _NAME (_Ts&&... __args) & STDEXEC_AUTO_RETURN \
798813 ( \
799- decltype (STDEXEC::__get_self<_Ts...>(*this )) \
800- ::STDEXEC_PP_CAT(static_, _FN)(*this , static_cast <_Ts&&>(__args)...) \
814+ STDEXEC_EXPLICIT_THIS_MANGLE (_NAME)(*this , static_cast <_Ts&&>(__args)...) \
801815 ) \
802816 \
803817 template <class ... _Ts> \
804- STDEXEC_ATTRIBUTE(always_inline) \
805- auto _FN (_Ts&&... __args) const & STDEXEC_AUTO_RETURN \
818+ STDEXEC_ATTRIBUTE (always_inline, host, device) \
819+ auto _NAME (_Ts&&... __args) const & STDEXEC_AUTO_RETURN \
806820 ( \
807- decltype (STDEXEC::__get_self<_Ts...>(*this )) \
808- ::STDEXEC_PP_CAT(static_, _FN)(*this , static_cast <_Ts&&>(__args)...) \
821+ STDEXEC_EXPLICIT_THIS_MANGLE (_NAME)(*this , static_cast <_Ts&&>(__args)...) \
809822 )
810823
811- # define STDEXEC_EXPLICIT_THIS_EAT_this
812- # define STDEXEC_EXPLICIT_THIS_EAT_auto
813- # define STDEXEC_EXPLICIT_THIS_EAT_void
814- # define STDEXEC_EXPLICIT_THIS_MANGLE_auto auto STDEXEC_EXPLICIT_THIS_MANGLE STDEXEC_PP_LPAREN
815- # define STDEXEC_EXPLICIT_THIS_MANGLE_void void STDEXEC_EXPLICIT_THIS_MANGLE STDEXEC_PP_LPAREN
816- # define STDEXEC_EXPLICIT_THIS_MANGLE (_NAME ) STDEXEC_PP_CAT(static_, _NAME)
817-
818- namespace STDEXEC
819- {
820- template <class ... _Ts, class _Self >
821- constexpr auto __get_self (_Self const &) -> _Self;
822- } // namespace STDEXEC
823-
824824#endif // STDEXEC_NO_STDCPP_EXPLICIT_THIS_PARAMETER()
825825
826826// //////////////////////////////////////////////////////////////////////////////////////////////////
0 commit comments