Instead of using the value type of the underlying range we use the reference type, such that in case the original range is passed in as const it is correctly propagated to the inner range type. Otherwise, we might end in the situation that we want to assign a const iterator to a non-const iterator which is not allowed.
Instead of using the value type of the underlying range we use the reference type, such that in case the original range is passed in as const it is correctly propagated to the inner range type. Otherwise, we might end in the situation that we want to assign a const iterator to a non-const iterator which is not allowed.