std::ranges::View, std::ranges::enable_view, std::ranges::view_base
Defined in header <ranges> | ||
---|---|---|
template<class T> concept View = Range<T> && Semiregular<T> && enable_view<T>; | (1) | |
template<class T> inline constexpr bool enable_view = /*see description*/ ; | (2) | |
struct view_base { }; | (3) |
1) The
2) The View
concept specifies the requirements of a Range
type that has constant time copy, move, and assignment operations (e.g. a pair of iterators, or a generator Range that creates its elements on-demand. Notably, the standard library containers are Ranges, but not Views)enable_view
variable template is used to indicate that whether a Range
is a View
, as follows: For a type T
, the default value of enable_view<T>
is:
- If
DerivedFrom<T, view_base>
istrue
,enable_view<T>
istrue
. - Otherwise, if
T
is a specialization of class templatestd::initializer_list
,std::set
,std::multiset
,std::unordered_set
,std::unordered_multiset
,std::match_results
,enable_view<T>
isfalse
- Otherwise, if both
T
andconst T
modelRange
anditer_reference_t<iterator_t<T>>
is not the same type asiter_reference_t<iterator_t<const T>>
,enable_view<T>
isfalse
. (in other words, deep constness implies element ownership, shallow constness implies reference (view) semantics) - Otherwise,
enable_view<T>
istrue
.
Notes
Users may derive from view_base
or specialize enable_view
to true
for types which model View
, and specialize enable_view
to false
for types which do not.
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/ranges/View