@@ -41,33 +41,30 @@ namespace STDEXEC {
4141 using __impl_of = decltype ((__declval<_Sender>().__impl_));
4242 } // namespace __detail
4343
44- // template <class _Descriptor>
45- // inline constexpr auto __descriptor_fn_v = _Descriptor{};
46-
47- #if STDEXEC_NVHPC()
48- template <
49- class _Descriptor ,
50- auto _DescriptorFn = ([]<class _Desc = _Descriptor>(_Desc __desc = {}) { return __desc; })
51- >
52- inline constexpr auto __descriptor_fn_v = _DescriptorFn;
44+ #if STDEXEC_EDG()
45+ # define STDEXEC_SEXPR_DESCRIPTOR_FN (_Descriptor ) \
46+ ([]<class _Desc = _Descriptor>(_Desc __desc = {}) { return __desc; })
47+ # define STDEXEC_SEXPR_DESCRIPTOR (_Tag, _Data, _Child ) \
48+ STDEXEC::__descriptor_fn<_Tag, _Data, _Child>()
49+ #else // ^^^ EDG ^^^ / vvv !EDG vvv
50+ # define STDEXEC_SEXPR_DESCRIPTOR_FN (_Descriptor ) ([] { return _Descriptor (); })
51+ # define STDEXEC_SEXPR_DESCRIPTOR (_Tag, _Data, _Child ) \
52+ STDEXEC::__descriptor_fn_v<STDEXEC::__detail::__desc<_Tag, _Data, _Child>>
53+ #endif
54+
55+ #if STDEXEC_DEMANGLE_SENDER_NAMES || STDEXEC_MSVC()
56+ template <class _Descriptor >
57+ inline constexpr auto __descriptor_fn_v = _Descriptor{};
5358#else
54- template <class _Descriptor , auto _DescriptorFn = ([] { return _Descriptor (); } )>
59+ template <class _Descriptor , auto _DescriptorFn = STDEXEC_SEXPR_DESCRIPTOR_FN( _Descriptor)>
5560 inline constexpr auto __descriptor_fn_v = _DescriptorFn;
5661#endif
5762
5863 template <class _Tag , class _Data , class ... _Child>
59- inline constexpr auto __descriptor_fn () {
64+ consteval auto __descriptor_fn () noexcept {
6065 return __descriptor_fn_v<__detail::__desc<_Tag, _Data, _Child...>>;
6166 }
6267
63- #if STDEXEC_EDG()
64- # define STDEXEC_SEXPR_DESCRIPTOR (_Tag, _Data, _Child ) \
65- STDEXEC::__descriptor_fn<_Tag, _Data, _Child>()
66- #else
67- # define STDEXEC_SEXPR_DESCRIPTOR (_Tag, _Data, _Child ) \
68- STDEXEC::__descriptor_fn_v<STDEXEC::__detail::__desc<_Tag, _Data, _Child>>
69- #endif
70-
7168 template <class _Tag >
7269 struct __sexpr_impl ;
7370
@@ -496,7 +493,7 @@ namespace STDEXEC {
496493 // See MAINTAINERS.md#class-template-parameters for `__id` and `__t`.
497494 using __id = __sexpr;
498495 using __t = __sexpr;
499- using __desc_t = decltype ( _DescriptorFn()) ;
496+ using __desc_t = __result_of< _DescriptorFn> ;
500497 using __tag_t = __desc_t ::__tag;
501498 using __captures_t = __minvoke<__desc_t , __q<__detail::__captures_t >>;
502499
0 commit comments