Skip to content

Commit bbb7967

Browse files
committed
try to work around msvc dain bramage
1 parent c032652 commit bbb7967

1 file changed

Lines changed: 17 additions & 20 deletions

File tree

include/stdexec/__detail/__basic_sender.hpp

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)