#pragma once
namespace std {
template <typename ret_t, typename... args_t>
struct coroutine_traits {
using promise_type = typename ret_t::promise_type;
};
template <class promise_t>
struct coroutine_handle {
static constexpr coroutine_handle from_address(void *addr) noexcept { return {}; };
};
} // namespace std
struct never_suspend {
bool await_ready() noexcept { return false; }
template <typename coro_t>
void await_suspend(coro_t handle) noexcept {}
void await_resume() noexcept {}
};
struct task {
struct promise_type {
task get_return_object() noexcept { return {}; }
never_suspend initial_suspend() noexcept { return {}; }
never_suspend final_suspend() noexcept { return {}; }
void return_void() {}
void unhandled_exception() {}
};
};