Почему co_await for loop не поставляется в C++20?

Я видел этот код из библиотеки cppcoro из репозитория github:

      cppcoro::async_generator<int> ticker(int count, threadpool& tp)
{
  for (int i = 0; i < count; ++i)
  {
    co_await tp.delay(std::chrono::seconds(1));
    co_yield i;
  }
}

cppcoro::task<> consumer(threadpool& tp)
{
  auto sequence = ticker(10, tp);
  for co_await (std::uint32_t i : sequence)
  {
    std::cout << "Tick " << i << std::endl;
  }
}

Где async_generator дает значение, в то время как может co_await и сопрограмма consumer имеет эквивалент:

      for co_await (std::uint32_t i : sequence) {
  std::cout << "Tick " << i << std::endl;
}

является

      {
  auto&& __range = sequence;
  auto __begin   = co_await __range.begin();
  auto __end     = __range.end();
  for (; __begin != __end; co_await ++__begin) {
    std::uint32_t i = *__begin;
    std::cout << "Tick " << i << std::endl;
  }
}

согласно черновику Coroutine TS: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/n4775.pdf

В чем причина, почему for co_await не поставляется в C++20?

0 ответов

Другие вопросы по тегам