13 template<
typename Send,
typename Promise>
24 template<
typename... Args>
27 self.result_pointer->emplace(util::forward<Args>(args)...);
28 self.continuation.resume();
32 static_cast<CoroutineHandle<>>(self.continuation.promise().unhandled_error(util::move(error))).resume();
36 static_cast<CoroutineHandle<>>(self.continuation.promise().unhandled_stopped()).resume();
40 return tag(self.continuation.promise());
44 template<
typename Send,
typename Promise>
53 explicit Type(Send&& sender, Promise& promise)
55 util::forward<Send>(sender),
56 Receiver {
util::addressof(m_result),
CoroutineHandle<Promise>::from_promise(promise) })) {}
62 return util::move(m_result).value();
72 template<
typename Send,
typename Promise>
87 template<
typename T,
typename Promise>
88 constexpr auto operator()(T&& value, Promise& promise)
const ->
decltype(
auto) {
91 "Customizations of di::as_awaitable() must return an Awaitable.");
94 return util::forward<T>(value);
Definition optional_forward_declaration.h:5
Definition awaitable_sender.h:16
Definition operations.h:11
Definition is_awaitable.h:36
Definition tag_invoke.h:33
Definition awaitable_sender.h:7
meta::Type< SenderAwaitableT< Send, Promise > > SenderAwaitable
Definition as_awaitable.h:73
constexpr auto start
Definition start.h:20
constexpr auto connect
Definition connect.h:42
constexpr as_awaitable_ns::Function as_awaitable
Definition as_awaitable.h:102
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
StatusCode< Erased< long > > Error
Definition error.h:8
Definition zstring_parser.h:9
std::coroutine_handle< Promise > CoroutineHandle
Definition coroutine.h:164
std::suspend_always SuspendAlways
Definition coroutine.h:169
Definition enable_generate_structed_bindings.h:46
Definition set_stopped.h:6
Definition awaitable_sender.h:9
meta::Conditional< concepts::LanguageVoid< Value >, Void, Value > Result
Definition as_awaitable.h:18
friend void tag_invoke(SetError, Type &&self, Error error)
Definition as_awaitable.h:31
void is_receiver
Definition as_awaitable.h:15
friend void tag_invoke(SetValue, Type &&self, Args &&... args)
Definition as_awaitable.h:26
constexpr friend auto tag_invoke(types::Tag< get_env > tag, Type const &self) -> decltype(auto)
Definition as_awaitable.h:39
friend void tag_invoke(SetStopped, Type &&self)
Definition as_awaitable.h:35
CoroutineHandle< Promise > continuation
Definition as_awaitable.h:21
Optional< Result > * result_pointer
Definition as_awaitable.h:20
meta::SingleSenderValueType< Send, meta::EnvOf< Promise > > Value
Definition as_awaitable.h:17
Definition as_awaitable.h:75
auto unhandled_stopped() noexcept -> std::coroutine_handle<>
auto initial_suspend() noexcept -> SuspendAlways
void unhandled_exception() noexcept
void return_void() noexcept
auto final_suspend() noexcept -> SuspendAlways
auto get_return_object() noexcept -> DummyPromise
auto unhandled_error(vocab::Error) noexcept -> std::coroutine_handle<>
Definition as_awaitable.h:86
constexpr auto operator()(T &&value, Promise &promise) const -> decltype(auto)
Definition as_awaitable.h:88
auto await_resume() -> Value
Definition as_awaitable.h:60
void await_suspend(CoroutineHandle<>) noexcept
Definition as_awaitable.h:59
auto await_ready() const noexcept -> bool
Definition as_awaitable.h:58
Type(Send &&sender, Promise &promise)
Definition as_awaitable.h:53
Definition as_awaitable.h:45