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