- ranges[meta header]
- concept[meta id-type]
- std::ranges[meta namespace]
- cpp20[meta cpp]
namespace std::ranges {
template<class T>
concept viewable_range =
range<T> &&
((view<remove_cvref_t<T>> && constructible_from<remove_cvref_t<T>, T>) ||
(!view<remove_cvref_t<T>> &&
(is_lvalue_reference_v<T> || (movable<remove_reference_t<T>> && !is-initializer-list<T>))));
}
- range[link range.md]
- view[link view.md]
- constructible_from[link /reference/concepts/constructible_from.md]
- is_lvalue_reference_v[link /reference/type_traits/is_lvalue_reference.md]
- movable[link /reference/concepts/movable.md]
- remove_reference_t[link /reference/type_traits/remove_reference.md]
- is-initializer-list[italic]
viewable_range
は、安全にview
へ変換できるRangeを表すコンセプトである。
Rangeアダプタを適用するには、viewable_range
である必要がある。
型T
がviewable_range
のモデルとなるのは、T
がrange
のモデルであり、かつT
がborrowed_range
のモデルであるか、remove_cvref_t
<T>
がview
のモデルである場合である。
borrowed_range
またはview
ではないrange
の右辺値は、viewable_range
のモデルにはならない。
(執筆中)
(執筆中)
- C++20
- Clang: 13.0.0 [mark verified]
- GCC: 10.1.0 [mark verified]
- ICC: ??
- Visual C++: 2019 Update 10 [mark verified]