# std::ranges::forward_range

From cppreference.com
< cpp‎ | ranges

Defined in header `<ranges>` |  |
template< class T > concept forward_range = ranges::input_range<T> && std::forward_iterator<ranges::iterator_t<T>>; |  | (since C++20)

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() {}

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/ranges/forward_range&oldid=169774"