Любого потока. Если сравнивать два итератора для двух совершенно разных потоков, то они станут равны как только оба итератора достигнут конца каждый своего потока. А для
eof вызывается конструктор по умолчанию, который сразу инициализирует его концом виртуального пустого потока.
Добавлено через 5 минут

Сообщение от
Maxwe11
а зачем вообще плодить лишнюю сущность, а не юзать file.eof()
В данном конкретном случае, наверное, незачем. Но потоковые итераторы, как и любые другие, могут участвовать в алгоритмах или интервальных вариантах функций. Тогда указатель на конец потока необходим.