.. _input_iterator: ******************** meta::input_iterator ******************** Defined in header ````. .. code-block:: cpp template concept input_iterator = meta::input_or_output_iterator && meta::readable && meta::derived_from, std::input_iterator_tag>; Pre-C++20 implementation of the :iterconcept:`input_iterator` concept. ---- Concept emulation ================= .. code-block:: cpp namespace mgs { namespace meta { template struct is_input_iterator { /* ... */ }; template constexpr auto is_input_iterator_v = is_input_iterator::value; template >> using input_iterator = I; } // namespace meta } // namespace mgs Example ======= .. code-block:: cpp #include using namespace mgs::meta; static_assert(is_input_iterator_v>, ""); static_assert(is_input_iterator_v, ""); // std::back_insert_iterator is an output_iterator static_assert(!is_input_iterator_v>, ""); See also ======== * :ref:`input_or_output_iterator` * :ref:`readable` * :ref:`derived_from` * :ref:`iter_concept`