Back to TILs

C++ coroutine — 5

Date: 2023-03-20Last modified: 2023-03-30

Table of contents



Awaiter methods

struct My_Awaitable {
  auto operator co_await() {
    return std::suspend_always{};



When paused the function state is save on heap topically.

Lazy computation

auto f = some_coroutine(); // store computation info in f
// Use f to manipulate the computation


C++ 20 introduces three keywords that help pause and resume coroutines

If a function has one of those keywords, it becomes a coroutine. There is no other special syntax for coroutines.

Which function can be a coroutine

It’s not every function in C++ that can be a coroutine. The functions below can’t be coroutines.

C++20 warnings

C++ 20 doesn’t provide actual usable coroutine types like Corolype

It provides the low level infrastructure to build them (promises, awaitables, coroutine handles,…

Building your own coroutine types is not recommended. It’s only reserved for hard core, highly experienced library developers who really know what they’re doing

It is expected that C++23 will provide high level coroutine types built into C++, ready to use just by including some headers

If you want to use them know, there are third party libraries that can help, like cppcoro and some others

See Also

int main( [[maybe_unused]] int argc, [[maybe_unused]] char **argv )
  return 0;

Third Party Coroutines Types

Possible output