[#result] == cobalt/result.hpp Awaitables can be modified to return `system::result` or `std::tuple` instead of using exceptions. [source,cpp] ---- // value only T res = co_await foo(); // as result system::result res = co_await cobalt::as_result(foo()); // as tuple std::tuple res = co_await cobalt::as_tuple(foo()); ---- Awaitables can also provide custom ways to handle results and tuples, by providing `await_resume` overloads using `cobalt::as_result_tag` and `cobalt::as_tuple_tag`.: [source,cpp, subs="+quotes"] ---- __your_result_type__ await_resume(cobalt::as_result_tag); __your_tuple_type__ await_resume(cobalt::as_tuple_tag); ---- This allows an awaitable to provide other error types than `std::exception_ptr`, for example `system::error_code`. This is done by <> and <>. [source,cpp] ---- // example of an op with result system::error_code, std::size_t system::result await_resume(cobalt::as_result_tag); std::tuple await_resume(cobalt::as_tuple_tag); ---- NOTE: Awaitables are still allowed to throw exceptions, e.g. for critical exceptions such as OOM.