std::ranges::forward_range(3)

NAME
std::ranges::forward_range - std::ranges::forward_range

Synopsis
   Defined in header <ranges>
   template< class T >
   concept forward_range = (since C++20)
       ranges::input_range<T> &&
   std::forward_iterator<ranges::iterator_t<T>>;
   The forward_range concept is a refinement of range for which ranges::begin returns a
   model of forward_iterator.

Example
// Run this code
 #include <forward_list>
 #include <queue>
 #include <ranges>
 #include <span>
 #include <stack>
 #include <tuple>
 const char* str{"not a forward range"};
 const char str2[] = "a forward range";
 static_assert(
     std::ranges::forward_range<decltype("a forward range")> &&
     !std::ranges::forward_range<decltype(str)> &&
     std::ranges::forward_range<decltype(str2)> &&
     !std::ranges::forward_range<std::stack<char>> &&
     std::ranges::forward_range<std::forward_list<char>> &&
     !std::ranges::forward_range<std::tuple<std::forward_list<char>>> &&
     std::ranges::forward_range<std::span<char>> &&
     !std::ranges::forward_range<std::queue<char>> &&
 "");
 int main() {}