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()26task f() { 27 Error error; 28 co_await g(); 29 } 30