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>))));
}
概要
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 ✅
- GCC: 10.1.0 ✅
- ICC: ??
- Visual C++: 2019 Update 10 ✅