begin()
не может вернуть ссылку на Iterator
; необходимо вернуть Iterator
по значению.
Когда вызывается объявленное пользователем преобразование в Iterator
, получается временный объект Iterator
. Неконстантная ссылка не может быть привязана к временной, поэтому вы получаете ошибку, когда begin()
возвращает ссылку.
Тем не менее, иметь функцию преобразования, которая возвращает Iterator
, в лучшем случае необычно.