Skip to content

Latest commit

 

History

History
55 lines (45 loc) · 2.16 KB

viewable_range.md

File metadata and controls

55 lines (45 loc) · 2.16 KB

viewable_range

  • 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である必要がある。

モデル

Tviewable_rangeのモデルとなるのは、Trangeのモデルであり、かつTborrowed_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]

参照