Some notes
1. It's important for us to be able to represent a range of a non-contiguous container.
2. Constructing a range from an iterator pair is unsafe and we should avoid doing it that way. If we had this primitive in base that ctor would be marked UNSAFE_BUFFER_USAGE, and we'd want to avoid using it anyway. Instead we'd want to construct a view of the whole map and then narrow it down, that way we get bounds checking and don't get mismatched iterator bugs.
3. We've discussed (in spanification team) about brining an AnySpan-like type that is a view of a container with random-access iterators, and that allows type conversions from the container to the view (such as to make a view of string_views from an array of strings).
4. We haven't had any concrete discussions around providing view types for other containers of non-random-access iterators.
5. I think we do want something here, even a view type with a full set of functionality (map, filter, count, fold, etc...) but not sure about subrange on its own.
6. The advantage of a primitive to combine iterator pairs or iterator/sentinel into a range in the meantime is that you can share range-based code with spans or full containers as well. Not sure if this particular case is using that benefit.