Why can't the Iterator work correctly?

It does in 2.13, via IterableOnce.

That is indeed how it is implemented.