.. _totally_ordered: ********************* meta::totally_ordered ********************* Defined in header ````. .. code-block:: cpp template concept totally_ordered = meta::equality_comparable && requires(std::remove_reference_t const& a, std::remove_reference_t const& b) { { a < b } -> meta::boolean; { a > b } -> meta::boolean; { a <= b } -> meta::boolean; { a >= b } -> meta::boolean; }; Pre-C++20 implementation of the :concept:`totally_ordered` concept. ---- Concept emulation ================= .. code-block:: cpp namespace mgs { namespace meta { template struct is_totally_ordered { /* ... */ }; template constexpr auto is_totally_ordered_v = is_totally_ordered::value; template >> using totally_ordered = T; } // namespace meta } // namespace mgs Example ======= .. code-block:: cpp #include using namespace mgs::meta; struct ordered {}; bool operator==(ordered const&, ordered const&); bool operator!=(ordered const&, ordered const&); bool operator<(ordered const&, ordered const&); bool operator>(ordered const&, ordered const&); bool operator<=(ordered const&, ordered const&); bool operator>=(ordered const&, ordered const&); static_assert(is_totally_ordered_v, ""); static_assert(is_totally_ordered_v, ""); See also ======== * :ref:`boolean` * :ref:`equality_comparable`