diff --git a/include/exec/at_coroutine_exit.hpp b/include/exec/at_coroutine_exit.hpp index 7377fae1e..916db8706 100644 --- a/include/exec/at_coroutine_exit.hpp +++ b/include/exec/at_coroutine_exit.hpp @@ -132,9 +132,15 @@ namespace exec { public: using promise_type = __promise; +#if STDEXEC_EDG() + __task(__coro::coroutine_handle<__promise> __coro) noexcept + : __coro_(__coro) { + } +#else explicit __task(__coro::coroutine_handle<__promise> __coro) noexcept : __coro_(__coro) { } +#endif __task(__task&& __that) noexcept : __coro_(std::exchange(__that.__coro_, {})) { @@ -184,10 +190,17 @@ namespace exec { }; struct __promise : with_awaitable_senders<__promise> { +#if STDEXEC_EDG() + template + __promise(_Action&&, _Ts&&... __ts) noexcept + : __args_{__ts...} { + } +#else template - explicit __promise(_Action&&, _Ts&... __ts) noexcept + explicit __promise(_Action&&, _Ts&&... __ts) noexcept : __args_{__ts...} { } +#endif auto initial_suspend() noexcept -> __coro::suspend_always { return {}; diff --git a/include/exec/on_coro_disposition.hpp b/include/exec/on_coro_disposition.hpp index 256b53683..de19b71fc 100644 --- a/include/exec/on_coro_disposition.hpp +++ b/include/exec/on_coro_disposition.hpp @@ -129,10 +129,17 @@ namespace exec { }; struct __promise : with_awaitable_senders<__promise> { +#if STDEXEC_EDG() + template + __promise(_Action&&, _Ts&&... __ts) noexcept + : __args_{__ts...} { + } +#else template explicit __promise(_Action&&, _Ts&... __ts) noexcept : __args_{__ts...} { } +#endif auto initial_suspend() noexcept -> __coro::suspend_always { return {}; @@ -189,7 +196,9 @@ namespace exec { private: template static auto __impl(_Action __action, _Ts... __ts) -> __task<_Ts...> { - task_disposition __d = co_await __get_disposition(); + using _GetDisposition = std::enable_if_t; + //task_disposition __d = co_await _GetDisposition{}; + task_disposition __d = {}; if (__d == _OnCompletion) { co_await static_cast<_Action&&>(__action)(static_cast<_Ts&&>(__ts)...); } diff --git a/include/stdexec/__detail/__connect_awaitable.hpp b/include/stdexec/__detail/__connect_awaitable.hpp index 23d586b30..7e55cf67b 100644 --- a/include/stdexec/__detail/__connect_awaitable.hpp +++ b/include/stdexec/__detail/__connect_awaitable.hpp @@ -104,9 +104,15 @@ namespace stdexec { struct __t : __promise_base { using __id = __promise; +#if STDEXEC_EDG() + __t(auto&&, _Receiver&& __rcvr) noexcept + : __rcvr_(__rcvr) { + } +#else explicit __t(auto&, _Receiver& __rcvr) noexcept : __rcvr_(__rcvr) { } +#endif auto unhandled_stopped() noexcept -> __coro::coroutine_handle<> { stdexec::set_stopped(static_cast<_Receiver&&>(__rcvr_));