Standard library header <experimental/ranges/range>
From cppreference.com
                    
                                        
                    
                    
                                                            
                    This header is part of the ranges library.
Range concepts
|   Defined in  namespace  
std::experimental::ranges  | |
   specifies that a type is a range, that is, it provides a begin iterator and an end sentinel  (concept)  | |
|    specifies that a range knows its size in constant time  (concept)  | |
|   specifies that a range is a view, that is, it has constant time copy/move/assignment  (concept)  | |
|   specifies that a range has identical iterator and sentinel types   (concept)  | |
  specifies a range whose iterator type satisfies InputIterator  (concept)  | |
  specifies a range whose iterator type satisfies OutputIterator (concept)  | |
  specifies a range whose iterator type satisfies ForwardIterator (concept)  | |
  specifies a range whose iterator type satisfies BidirectionalIterator (concept)  | |
  specifies a range whose iterator type satisfies RandomAccessIterator (concept)  | |
Range access
|   Defined in  namespace  
std::experimental::ranges  | |
|   returns an iterator to the beginning of a range   (customization point object)  | |
|   returns an iterator to the end of a range  (customization point object)  | |
|   returns a reverse iterator to a range  (customization point object)  | |
|   returns a reverse end iterator to a range   (customization point object)  | |
Range primitives
|   Defined in  namespace  
std::experimental::ranges  | |
|    obtains the size of a range whose size can be calculated in constant time  (customization point object)  | |
|    checks whether a range is empty   (customization point object)  | |
|   obtains a pointer to the beginning of a contiguous range   (customization point object)  | |
|   obtains the iterator and sentinel types of a range  (alias template)  | |
Synopsis
#include <experimental/ranges/iterator> namespace std { namespace experimental { namespace ranges { inline namespace v1 { namespace { constexpr /* unspecified */ begin = /* unspecified */; constexpr /* unspecified */ end = /* unspecified */; constexpr /* unspecified */ cbegin = /* unspecified */; constexpr /* unspecified */ cend = /* unspecified */; constexpr /* unspecified */ rbegin = /* unspecified */; constexpr /* unspecified */ rend = /* unspecified */; constexpr /* unspecified */ crbegin = /* unspecified */; constexpr /* unspecified */ crend = /* unspecified */; } namespace { constexpr /* unspecified */ size = /* unspecified */; constexpr /* unspecified */ empty = /* unspecified */; constexpr /* unspecified */ data = /* unspecified */; constexpr /* unspecified */ cdata = /* unspecified */; } template <class T> using iterator_t = decltype(ranges::begin(declval<T&>())); template <class T> using sentinel_t = decltype(ranges::end(declval<T&>())); template <class> constexpr bool disable_sized_range = false; template <class T> struct enable_view { }; struct view_base { }; template <class T> concept bool Range = /* see definition */; template <class T> concept bool SizedRange = /* see definition */; template <class T> concept bool View = /* see definition */; template <class T> concept bool BoundedRange = /* see definition */; template <class T> concept bool InputRange = /* see definition */; template <class R, class T> concept bool OutputRange = /* see definition */; template <class T> concept bool ForwardRange = /* see definition */; template <class T> concept bool BidirectionalRange = /* see definition */; template <class T> concept bool RandomAccessRange = /* see definition */; }}}}