Конфликт времен жизни

Похоже я слишком раскатал губу насчет GATs. Они предназначены для случаев когда структура владеет данными, а не ссылается на них.

Даже если GATs позволят связывать вж, как я писал раньше, то такой итератор будет совершенно бесполезен. После первого вызова метода next() произойдет “вечное” заимствование структуры итератора и второй раз его вызвать будет нельзя, никакие ограничения области видимости не помогут. Все из-за одной интересной особенности при вычислении длительности заимствования данных компилятором: Почему переменная data заимствуется после вызова функции?

Так что кроме unsafe вариантов нет.