.. _weakly_incrementable: ************************** meta::weakly_incrementable ************************** Defined in header ````. .. code-block:: cpp template concept weakly_incrementable = meta::semiregular && requires(I i) { typename meta::iter_difference_t; requires meta::signed_integral>; { ++i } -> meta::same_as; i++; }; Pre-C++20 implementation of the :iterconcept:`weakly_incrementable` concept. ---- Concept emulation ================= .. code-block:: cpp namespace mgs { namespace meta { template struct is_weakly_incrementable { /* ... */ }; template constexpr auto is_weakly_incrementable_v = is_weakly_incrementable::value; template >> using weakly_incrementable = I; } // namespace meta } // namespace mgs Example ======= .. code-block:: cpp #include using namespace mgs::meta; struct dummy_weakly_incrementable { using difference_type = std::ptrdiff_t; dummy_weakly_incrementable& operator++(); dummy_weakly_incrementable operator++(int); }; static_assert(is_weakly_incrementable_v, ""); static_assert(is_weakly_incrementable_v, ""); See also ======== * :ref:`signed_integral` * :ref:`semiregular` * :ref:`same_as` * :ref:`iter_difference_t`