This is in contrast with the "Introduction" section of the documentation which
stresss that both versions of find have to be implemented due to the forwarding
problem.
You are entirely correct. The reverse function is missing the const overload, and this will cause a problem when returning a temporary to a constant range that has mutable elements. A workaround, which I expect you have already thought of, would be to hold a const reference to the range in a variable and pass this into reverse.
I shall put a correction into the trunk as soon as possible. I shall also review all of the algorithm functions for similar mistakes.
I apologize for my oversight and for any inconvenience this has caused.
Moreover, iterator_range beheaves like stl iterators (and const_iterators,
depending on the template argument used) and as such a const
iterator_range<std::vector<double>::iterator> will behave like a mutable range
(and the range_iterator class knows this).
Please notice this is in contrast with the sub_range class (something I
personally find a bit confusing :P).
This is deliberately in contrast. The iterator_range class wraps an iterator to model a Range Concept. The sub_range wraps a Range, or Container while preserving const-ness of the underlying Range.