Unfortunately, and respectfully, that is not at all clear from either docs, please reread range/reference/utilities/iterator_range.html and range/reference/utilities/sub_range.html. The latter defers to the former, and all the former states about range concepts is: "The intention of the iterator_range class is to encapsulate two iterators so they fulfill the Forward Range concept". And, obviously, just because some type fulfills the Forward Range concept does not mean that it fulfills refinements thereof. Additionally, there is no indication in the iterator_range doc if the underlying iterator models refinements of the Forward Iterator concept, than its corresponding iterator_range class also models analogous refinements of the Forward Range concept. A statement along the lines of the last sentence added to the iterator_range doc would go a long way towards clarifying this, else one is left with being forced to deduce this fact.
I agree that the documentation is incomplete here. I would be happy to review and commit a documentation patch.
I've created a pull request at GitHub.
Thanks! I reviewed the PR on GitHub. (Sorry for taking so long. The last time I committed a change to Boost.Range, Boost was still using SVN. I had some process-related catching up to do.) Regards, Nate