# std::experimental::ranges::View

< cpp‎ | experimental‎ | ranges

定义于头文件 `<experimental/ranges/range>` |  |
template <class T> concept bool View = ranges::Range<T> && ranges::Semiregular<T> && /* view-predicate<T> */; |  | (范围 TS)
template<class T> struct enable_view {}; |  | (范围 TS)
struct view_base {}; |  | (范围 TS)

概念 `View<T>` 指定半常规范围 `T` 拥有常数时间的复制、移动和赋值操作。

概念的 /* 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 。