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