@@ -39,16 +39,29 @@ struct basic_sender : ::beman::execution26::detail::product_type<Tag, Data, Chil
3939 data.children );
4040 }
4141
42+ template <class Self , class Env >
43+ constexpr auto get_completion_behaviour (this Self&& self, Env&& env) noexcept -> decltype(auto ) {
44+ auto data{::beman::execution26::detail::get_sender_data (self)};
45+ return ::std::apply (
46+ [&data, &env](auto &&... cs) {
47+ return ::beman::execution26::detail::impls_for<Tag>::get_completion_behaviour (
48+ ::std::forward<Env>(env),
49+ ::beman::execution26::detail::forward_like<Self>(data.data ),
50+ ::beman::execution26::detail::forward_like<Self>(cs)...);
51+ },
52+ ::beman::execution26::detail::forward_like<Self>(data.children ));
53+ }
54+
4255 template <typename Receiver>
43- requires (not ::beman::execution26::receiver<Receiver>)
56+ requires (not ::beman::execution26::receiver<Receiver>)
4457 auto connect (Receiver receiver) = BEMAN_EXECUTION26_DELETE(" the passed receiver doesn't model receiver" );
4558
4659 private:
4760#if __cpp_explicit_this_parameter < 302110L // -dk:TODO need to figure out how to use explicit this with forwarding
4861 template <::beman::execution26::receiver Receiver>
4962 auto connect (Receiver receiver) & noexcept (
50- noexcept (::beman::execution26::detail::basic_operation<basic_sender&, Receiver>{* this , :: std::move (receiver)}))
51- -> ::beman::execution26::detail::basic_operation<basic_sender&, Receiver> {
63+ noexcept (::beman::execution26::detail::basic_operation<basic_sender&, Receiver>{
64+ * this , :: std::move (receiver)})) -> ::beman::execution26::detail::basic_operation<basic_sender&, Receiver> {
5265 return {*this , ::std::move (receiver)};
5366 }
5467 template <::beman::execution26::receiver Receiver>
@@ -59,18 +72,18 @@ struct basic_sender : ::beman::execution26::detail::product_type<Tag, Data, Chil
5972 }
6073 template <::beman::execution26::receiver Receiver>
6174 auto connect (Receiver receiver) && noexcept (
62- noexcept (::beman::execution26::detail::basic_operation<basic_sender, Receiver>{:: std::move (* this ),
63- ::std::move (receiver)}))
64- -> ::beman::execution26::detail::basic_operation<basic_sender, Receiver> {
75+ noexcept (::beman::execution26::detail::basic_operation<basic_sender, Receiver>{
76+ ::std::move (* this ),
77+ ::std::move(receiver)})) -> ::beman::execution26::detail::basic_operation<basic_sender, Receiver> {
6578 return {::std::move (*this ), ::std::move (receiver)};
6679 }
6780#else
6881 template <::beman::execution26::detail::decays_to<basic_sender> Self, ::beman::execution26::receiver Receiver>
6982 auto
7083 connect (this Self&& self,
7184 Receiver receiver) noexcept (noexcept (::beman::execution26::detail::basic_operation<basic_sender, Receiver>{
72- ::std::forward<Self>(self), :: std::move (receiver)}))
73- -> ::beman::execution26::detail::basic_operation<Self, Receiver> {
85+ ::std::forward<Self>(self),
86+ ::std::move (receiver)})) -> ::beman::execution26::detail::basic_operation<Self, Receiver> {
7487 return {::std::forward<Self>(self), ::std::move (receiver)};
7588 }
7689#endif
@@ -101,6 +114,12 @@ struct basic_sender : ::beman::execution26::detail::product_type<Tag, Data, Chil
101114 -> ::beman::execution26::detail::completion_signatures_for<Self, Env> {
102115 return {};
103116 }
117+
118+ template <::beman::execution26::detail::decays_to<basic_sender> Self, typename Env>
119+ auto get_completion_behaviour (this Self&&, Env&&) noexcept
120+ -> ::beman::execution26::detail::completion_signatures_for<Self, Env> {
121+ return {};
122+ }
104123#endif
105124};
106125} // namespace beman::execution26::detail
0 commit comments