.. _forward_range: ******************* meta::forward_range ******************* Defined in header ````. .. code-block:: cpp template concept forward_range = meta::input_range && meta::forward_iterator>; Pre-C++20 implementation of the :rangeconcept:`forward_range` concept. ---- Concept emulation ================= .. code-block:: cpp namespace mgs { namespace meta { template struct is_forward_range { /* ... */ }; template constexpr auto is_forward_range_v = is_forward_range::value; template >> using forward_range = T; } // namespace meta } // namespace mgs Example ======= .. code-block:: cpp #include using namespace mgs::meta; struct dummy_input_range { std::istreambuf_iterator begin(); std::istreambuf_iterator end(); }; static_assert(is_forward_range_v>, ""); static_assert(is_forward_range_v, ""); static_assert(!is_forward_range_v, ""); See also ======== * :ref:`input_range` * :ref:`forward_iterator` * :ref:`iterator_t`