
The Range concept documentation has always stated that a valid range x is one where boost::end(x) is reachable from boost::begin(x). In your use case, as far as I understand, you do not necessarily have a valid range.
I agree with what you said here. However, given the old documentation, I hope you see it wasn't unnatural for us to use iterator_range to deal precisely with the case when we don't have a "valid" (as defined by reachability) range.
I'm sorry for any discrepancies between iterator_range documentation and the Range concept documentation and the actual iterator_range implementation in any given release.
I don't see any reason for you to apologise - your replies have been among the most helpful. I appreciate it but wish that it had come from the owner of Boost.Range.