Небольшая предыстория: Имеем проект, который активно использует буст, несколько компиляторов разных версий.
В один момент все перестало собираться, на одном из компиляторов. Решение было найдено, но я полез в гугл за пониманием происходящего.
В кратце проблема была в использование итераторов возвращаемых make_transform_iterator с функтором возвращаемым значение в boost::algorithm::boyer_moore_search. После замены функтора на функторов возвращающий ссылку все заработало вновь и везде.
Так вот теперь вопрос:
Правильно ли я понимаю, что random access iterator в видение boost не требует того что бы operator* возвращал ссылку, а не значение?
А вот c++ концепция тех же итераторов говорит, что возвращаемы тип должен быть ссылкой.
Или я что-то тут опускаю?