std::experimental::ranges::View
From cppreference.com
< cpp | experimental | ranges
| ヘッダー <experimental/ranges/range>で定義されています |
||
| template< class T > concept bool View = Range<T> && Semiregular<T> && /* view-predicate<T> */; |
(ranges TS) | |
| template< class T > struct enable_view {}; |
(ranges TS) | |
| struct view_base {}; |
(ranges TS) | |
concept View<T> は、semiregular な範囲 T が定数時間でのコピー、ムーブ、代入操作を持つことを指定します。
concept の /* view-predicate<T> */ の部分は、以下のように決定されます。
- qualified-id ranges::enable_view<T>::type が有効で、型を指している場合、ranges::enable_view<T>::type::value;
- そうでなく、std::is_base_of_v<ranges::view_base, T> が true である場合、true;
- そうでなく、
Tが std::initializer_list、std::set、std::multiset、std::unordered_set、または std::unordered_multiset の特殊化である場合、false; - そうでなく、
Tとconst Tの両方がRangeを満たし、かつ ranges::reference_t <ranges::iterator_t<T>> が ranges::reference_t<ranges::iterator_t<const T>> と異なる型である場合、false; - そうでなければ、true。