Почему 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?