.. _common_range: ****************** meta::common_range ****************** Defined in header ````. .. code-block:: cpp template concept common_range = meta::range && meta::same_as, meta::sentinel_t>; Pre-C++20 implementation of the :rangeconcept:`common_range` concept. ---- Concept emulation ================= .. code-block:: cpp namespace mgs { namespace meta { template struct is_common_range { /* ... */ }; template constexpr auto is_common_range_v = is_common_range::value; template >> using common_range = T; } // namespace meta } // namespace mgs Example ======= .. code-block:: cpp #include using namespace mgs::meta; struct sentinel {}; bool operator==(char*, pointer_sentinel); bool operator!=(char*, pointer_sentinel); bool operator==(pointer_sentinel, char*); bool operator!=(pointer_sentinel, char*); struct input_range { char* begin(); sentinel end(); }; static_assert(is_common_range_v, ""); static_assert(!is_common_range_v, ""); See also ======== * :ref:`range` * :ref:`same_as` * :ref:`iterator_t` * :ref:`sentinel_t`