Defined in header
range concept defines the requirements of a type that allows iteration over its elements by providing an iterator and sentinel that denote the elements of the range.
 Semantic requirements
Given an expression E such that decltype((E)) is T, T models range only if
- [ranges::begin(E), ranges::end(E)) denotes a range, and
- both ranges::begin(E) and ranges::end(E) are amortized constant time and do not alter the value of E in a manner observable to equality-preserving expressions, and
- if the type of ranges::begin(E) models
forward_iterator, ranges::begin(E) is equality-preserving (in other words, forward iterators support multi-pass algorithms)