Здравствуйте, vdimas, Вы писали:
V>Вдогонку. Что насчет локальных переменных корутины? Где их хранить?
Так в этом же вся суть
Функция автоматически преобразовывается в класс-автомат, и её локальные переменные становятся полями класса.
Тоже самое например происходит в показанном ранее примере C# — обрати внимание на исходный код с await, на переменную result, и на поле
<result>5__1 в сгенерированном коде
V>В примерах буста они хранятся в структуре-наследнике asio::coroutine.
V>А как будет выглядеть аналогичный объект с т.з. системы типов С++ в случае:
V>V>iterator<T> generate() resumable {
V> int tmp = 1;
V> yield return rand()*tmp++;
V> yield return rand()*tmp++;
V>};
V>
V>Где будет хранится локальная переменная tmp в твоём случае, т.е. когда iterator<> — это полностью value-type объект?
Она будет хранится внутри объекта-автомата, который будет хранится внутри самого итератора. Естественно тип итератора будет зависеть от типа класса-автомата.