The sub_range class inherits
all its functionality from the iterator_range class. The sub_range class is often easier to use
because one must specify the Forward
Range template argument instead of an iterator. Moreover, the sub_range class can propagate constness
since it knows what a corresponding const_iterator
is.

The class should be trivial to use as seen below. Imagine that we have
an algorithm that searches for a sub-string in a string. The result is
an iterator_range, that delimits the match. We need to store the result
from this algorithm. Here is an example of how we can do it with and without
sub_range