.. _bidirectional_range: ************************* meta::bidirectional_range ************************* Defined in header ````. .. code-block:: cpp template concept bidirectional_range = meta::forward_range && meta::bidirectional_iterator>; Pre-C++20 implementation of the :rangeconcept:`bidirectional_range` concept. ---- Concept emulation ================= .. code-block:: cpp namespace mgs { namespace meta { template struct is_bidirectional_range { /* ... */ }; template constexpr auto is_bidirectional_range_v = is_bidirectional_range::value; template >> using bidirectional_range = T; } // namespace meta } // namespace mgs Example ======= .. code-block:: cpp #include using namespace mgs::meta; static_assert(is_bidirectional_range_v>, ""); static_assert(is_bidirectional_range_v, ""); static_assert(!is_bidirectional_range_v>, ""); See also ======== * :ref:`range` * :ref:`bidirectional_iterator` * :ref:`iterator_t`