std::ranges::bidirectional_range
From cppreference.com
 
 
 
 
 
 C++ 
 Feature test macros (C++20)
 Concepts library (C++20)
 Metaprogramming library (C++11)
 Ranges library (C++20)
 Filesystem library (C++17)
 Concurrency support library (C++11)
 Execution control library (C++26)
Ranges library 
     
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
(C++23)(C++23)
  (C++26)(C++26)
(C++23)(C++23)
  (C++26)(C++26)
(C++26)(C++26)
  (C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
  (C++23)(C++23)
(C++23)
(C++23)(C++23)
(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
Defined in header 
 
 
<ranges> 
 template< class T >
 
 (since C++20) 
concept bidirectional_range =
The bidirectional_range concept is a refinement of range for which ranges::begin returns a model of bidirectional_iterator.
[edit] Example
Run this code
#include <forward_list> #include <list> #include <ranges> #include <set> #include <unordered_set> int main() { static_assert( std::ranges::bidirectional_range<std::set <int>> and not std::ranges::bidirectional_range<std::unordered_set <int>> and std::ranges::bidirectional_range<std::list <int>> and not std::ranges::bidirectional_range<std::forward_list <int>> ); }