- ranges[meta header]
- concept[meta id-type]
- std::ranges[meta namespace]
- cpp20[meta cpp]
namespace std::ranges {
template<class T>
concept forward_range = input_range<T> && forward_iterator<iterator_t<T>>;
}
- input_range[link input_range.md]
- forward_iterator[link /reference/iterator/forward_iterator.md]
- iterator_t[link iterator_t.md]
forward_range
は、イテレータがforward_iterator
であるRangeを表すコンセプトである。
型T
がforward_range
のモデルとなるのは、T
がinput_range
のモデルであり、かつそのイテレータがforward_iterator
のモデルである場合である。
#include <ranges>
#include <forward_list>
#include <iostream>
int main() {
using namespace std;
// forward_listはforward_range
static_assert(ranges::forward_range<forward_list<int>>);
// basic_istream_viewはforward_rangeではなく、input_range
static_assert(!ranges::forward_range<decltype(views::istream<int>(cin))>);
static_assert(ranges::input_range<decltype(views::istream<int>(cin))>);
}
- ranges::forward_range[color ff0000]
- ranges::input_range[link input_range.md]
- basic_istream_view[link basic_istream_view.md]
- views::istream[link basic_istream_view.md]
- C++20
- Clang: 13.0.0 [mark verified]
- GCC: 10.1.0 [mark verified]
- ICC: ??
- Visual C++: 2019 Update 10 [mark verified]