xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/Inputs/system/coroutines.h (revision 17d403f6644337e3e099e6dcb7b057fce11e65a5)
1 #pragma once
2 
3 namespace std {
4 
5 template <typename ret_t, typename... args_t>
6 struct coroutine_traits {
7   using promise_type = typename ret_t::promise_type;
8 };
9 
10 template <class promise_t>
11 struct coroutine_handle {
from_addresscoroutine_handle12   static constexpr coroutine_handle from_address(void *addr) noexcept { return {}; };
13 };
14 
15 } // namespace std
16 
17 struct never_suspend {
await_readynever_suspend18   bool await_ready() noexcept { return false; }
19   template <typename coro_t>
await_suspendnever_suspend20   void await_suspend(coro_t handle) noexcept {}
await_resumenever_suspend21   void await_resume() noexcept {}
22 };
23 
24 struct task {
25   struct promise_type {
get_return_objecttask::promise_type26     task get_return_object() noexcept { return {}; }
initial_suspendtask::promise_type27     never_suspend initial_suspend() noexcept { return {}; }
final_suspendtask::promise_type28     never_suspend final_suspend() noexcept { return {}; }
return_voidtask::promise_type29     void return_void() {}
unhandled_exceptiontask::promise_type30     void unhandled_exception() {}
31   };
32 };
33