1 #include <coroutine>
2 
3 struct task {
4   struct promise_type {
initial_suspendtask::promise_type5     auto initial_suspend() noexcept { return std::suspend_always{}; }
final_suspendtask::promise_type6     auto final_suspend() noexcept { return std::suspend_always{}; }
return_voidtask::promise_type7     void return_void() {}
get_return_objecttask::promise_type8     task get_return_object() { return task{}; }
unhandled_exceptiontask::promise_type9     void unhandled_exception() noexcept {}
10   };
11 
~tasktask12   ~task() noexcept {}
13 
await_readytask14   bool await_ready() const noexcept { return false; }
await_suspendtask15   void await_suspend(std::coroutine_handle<>) noexcept {}
await_resumetask16   void await_resume() noexcept {}
17 };
18 
19 struct Error {
ErrorError20    Error() { };
noexceptError21   ~Error() noexcept(false) {}
22 };
23 
24 task g();
25 
f()26 task f() {
27   Error error;
28   co_await g();
29 }
30