Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
more bug fixes and work around gcc<13 bugs
  • Loading branch information
ericniebler committed Dec 20, 2025
commit e69adaa3853daf5ece75535973ad78e7331f0acd
14 changes: 7 additions & 7 deletions include/exec/sequence.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -186,15 +186,15 @@ namespace exec {
stdexec::__minvoke<stdexec::__mfold_left<void, stdexec::__q2<_fold_fn>>, Sndrs...>;
};

template <class... Sndrs>
struct _sndr {
template <class Sndr0, class... Sndrs>
struct _sndr<Sndr0, Sndrs...> {
using sender_concept = stdexec::sender_t;

template <class... Env>
using _completions_t = stdexec::__minvoke<_completions<Env...>, Sndrs...>;
using _completions_t = stdexec::__minvoke<_completions<Env...>, Sndr0, Sndrs...>;

template <class Self, class... Env>
requires(stdexec::__decay_copyable<stdexec::__copy_cvref_t<Self, Sndrs>> && ...)
requires stdexec::__decay_copyable<Self>
STDEXEC_ATTRIBUTE(host, device)
STDEXEC_EXPLICIT_THIS_BEGIN(auto get_completion_signatures)(this Self&&, Env&&...)
-> _completions_t<Env...> {
Expand All @@ -203,17 +203,17 @@ namespace exec {
STDEXEC_EXPLICIT_THIS_END(get_completion_signatures)

template <class Self, class Rcvr>
requires(stdexec::__decay_copyable<stdexec::__copy_cvref_t<Self, Sndrs>> && ...)
requires stdexec::__decay_copyable<Self>
STDEXEC_ATTRIBUTE(host, device)
STDEXEC_EXPLICIT_THIS_BEGIN(auto connect)(this Self&& self, Rcvr rcvr) {
return _opstate<Rcvr, Sndrs...>{
return _opstate<Rcvr, stdexec::__copy_cvref_t<Self, Sndr0>, Sndrs...>{
static_cast<Rcvr&&>(rcvr), static_cast<Self&&>(self)._sndrs};
}
STDEXEC_EXPLICIT_THIS_END(connect)

STDEXEC_ATTRIBUTE(no_unique_address, maybe_unused) sequence_t _tag;
STDEXEC_ATTRIBUTE(no_unique_address, maybe_unused) stdexec::__ignore _ignore;
stdexec::__tuple<Sndrs...> _sndrs;
stdexec::__tuple<Sndr0, Sndrs...> _sndrs;
};

template <class Sndr>
Expand Down
6 changes: 3 additions & 3 deletions include/nvexec/stream/continues_on.cuh
Original file line number Diff line number Diff line change
Expand Up @@ -161,19 +161,19 @@ namespace nvexec::_strm {
: sndr_(schedule_from(static_cast<Sender&&>(sndr))) {
}

template <__decays_to<source_sender_t> Self, receiver Receiver>
template <__decay_copyable Self, receiver Receiver>
STDEXEC_EXPLICIT_THIS_BEGIN(auto connect)(this Self&& self, Receiver rcvr)
-> connect_result_t<__copy_cvref_t<Self, schedule_from_sender_t>, Receiver> {
return stdexec::connect(static_cast<Self&&>(self).sndr_, static_cast<Receiver&&>(rcvr));
}
STDEXEC_EXPLICIT_THIS_END(connect)

template <__decays_to<source_sender_t> _Self, class... _Env>
template <__decay_copyable _Self, class... _Env>
STDEXEC_EXPLICIT_THIS_BEGIN(auto get_completion_signatures)(this _Self&&, _Env&&...)
-> __completion_signatures_of_t<__copy_cvref_t<_Self, Sender>, _Env...> {
return {};
}
STDEXEC_EXPLICIT_THIS_END(get_completion_signatures)
STDEXEC_EXPLICIT_THIS_END(get_completion_signatures)

[[nodiscard]]
auto get_env() const noexcept -> env_of_t<const Sender&> {
Expand Down
2 changes: 1 addition & 1 deletion include/stdexec/__detail/__let.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -551,7 +551,7 @@ namespace stdexec {
static_assert(sender_expr_for<_Sender, __let_t<_SetTag>>);
using _Fun = __decay_t<__data_of<_Sender>>;
using _Child = __child_of<_Sender>;
using _Env2 = __env2_t<_SetTag, env_of_t<const _Child&>, env_of_t<const _Receiver&>>;
using _Env2 = __env2_t<_SetTag, env_of_t<_Child>, env_of_t<_Receiver>>;
using __mk_let_state = __mbind_front_q<__let_state, _Receiver, _Fun, _SetTag, _Env2>;

using __let_state_t = __gather_completions_of<
Expand Down
7 changes: 2 additions & 5 deletions include/stdexec/__detail/__meta.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -830,15 +830,12 @@ namespace stdexec {
using __demangle_fn = decltype(__demangle_v<_Ty>);

template <class _Ty>
extern __mcompose<__cplr, __demangle_fn<_Ty>> __demangle_v<_Ty &>;

template <class _Ty>
extern __mcompose<__cpclr, __demangle_fn<_Ty>> __demangle_v<_Ty const &>;
using __demangle_t = __minvoke<__demangle_fn<_Ty>, _Ty>;
} // namespace __detail

// A utility for pretty-printing type names in diagnostics
template <class _Ty>
using __demangle_t = __minvoke<__detail::__demangle_fn<_Ty>, _Ty>;
using __demangle_t = __copy_cvref_t<_Ty, __detail::__demangle_t<std::remove_cvref_t<_Ty>>>;

namespace __detail {
//////////////////////////////////////////////////////////////////////////////////////////
Expand Down
5 changes: 3 additions & 2 deletions include/stdexec/__detail/__shared.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -433,9 +433,10 @@ namespace stdexec::__shared {
struct __shared_impl : __sexpr_defaults {
static constexpr auto get_state =
[]<class _CvrefSender, class _Receiver>(_CvrefSender&& __sndr, _Receiver&) noexcept
-> __local_state<_CvrefSender, _Receiver> {
-> __local_state<_CvrefSender, _Receiver>
requires __decay_copyable<__data_of<_CvrefSender>>
{
static_assert(sender_expr_for<_CvrefSender, _Tag>);
static_assert(__decay_copyable<_CvrefSender>);
return __local_state<_CvrefSender, _Receiver>{static_cast<_CvrefSender&&>(__sndr)};
};

Expand Down
Loading