top | item 33085739

(no title)

somerando7 | 3 years ago

You have to use something similar to https://github.com/facebook/folly/tree/main/folly/experiment... to solve this problem.

It's a nasty bug that everyone encounters when first working with coroutines. (Similarly everyone will encounter references that don't live until you co_await the task).

discuss

order

boundchecked|3 years ago

C++20 coroutines demonstrated one side of committee-led modern C++ that left an impression of it is ultimately designed-by and -for library writers; instead of being suggested third-party library or "wait for C++23" for better experience, I'd love to see these related machinery released the same time in the standard library.

grogers|3 years ago

Alternatively, you can pass the things you would have captured instead as arguments to the lambda (by value!) and they are valid for the duration of the coroutine. So you can do a lambda returning a coroutine lambda like

  task<Foo> t = [foo]() {
    return [](auto f) -> task<Foo> {
      co_await something();
      co_return f;
    }(foo);
  }();