- 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を表すコンセプトである。
型T
がoutput_range
のモデルとなるのは、T
がrange
のモデルであり、かつそのイテレータが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]