По определённым причинам имеется необходимость реализовать собственный итератор (Forward iterator) здесь сказано следующее:
Input Can be dereferenced as an rvalue
Output Can be dereferenced as an lvalue (only for mutable iterator types)
Там же, сказано, что Forward Iterator должен включать в себя функциональность Input iperator и Output iterator. Тогда, каким образом в Forward iterator могут присутствовать две реализации operator* возвращающие соответственно value_type и reference_type (rvalue и lvalue)?
Теперь вопрос: правильно ли я понимаю, что предыдущий абзац моего вопроса - бред, и lvalue с rvalue - понятия которые определяются (UPD: различаются) в зависимости от контекста, и, как следствие, реализация Forward iterator будет включать в себя возврат ссылки, которая можт употребляться как lvalue так и rvalue?
На cplusplus.com хватает ошибок.
Открываем https://en.cppreference.com/w/cpp/iterator и https://en.cppreference.com/w/cpp/named_req/InputIterator и видим, что:
Forward iterator не обязан быть output iterator'ом (но должен быть input iterator'ом).
*a для input iterator'а должен возвращать std::iterator_traits<..>::reference, но этот reference можно сделать вообще любым типом (нужно только чтобы его можно было преобразовать в std::iterator_traits<..>::value_type.
А вот у forward iterator'а reference должен совпадать с value_type &.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости