Skip to content

Latest commit

 

History

History
64 lines (53 loc) · 1.91 KB

output_range.md

File metadata and controls

64 lines (53 loc) · 1.91 KB

output_range

  • ranges[meta header]
  • concept[meta id-type]
  • std::ranges[meta namespace]
  • cpp20[meta cpp]
namespace std::ranges {
  template<class R, class T>
  concept output_range = range<R> && output_iterator<iterator_t<R>, T>;
}
  • range[link range.md]
  • output_iterator[link /reference/iterator/output_iterator.md]
  • iterator_t[link iterator_t.md]

概要

output_rangeは、イテレータがoutput_iteratorであるRangeを表すコンセプトである。

モデル

Toutput_rangeのモデルとなるのは、Trangeのモデルであり、かつそのイテレータがoutput_iteratorのモデルである場合である。

#include <ranges>
#include <iterator>
#include <concepts>
#include <iostream>
#include <vector>

int main() {
  using namespace std;
  // ostream_iteratorから作ったRangeはoutput_range
  ostream_iterator<int> osi(cout);
  static_assert(ranges::output_range<decltype(views::counted(osi, 5)), int>);

  // constではないコンテナはoutput_range
  static_assert(ranges::output_range<vector<int>&, int>);

  // constなコンテナには書き込めないので、output_rangeではない
  static_assert(!ranges::output_range<const vector<int>&, int>);
}
  • ranges::output_range[color ff0000]
  • views::counted[link counted.md]
  • ostream_iterator[link /reference/iterator/ostream_iterator.md]

出力

バージョン

言語

  • C++20

処理系

  • Clang: 13.0.0 [mark verified]
  • GCC: 10.1.0 [mark verified]
  • ICC: ??
  • Visual C++: 2019 Update 10 [mark verified]

参照