.. _totally_ordered_with: ************************** meta::totally_ordered_with ************************** Defined in header ````. .. code-block:: cpp template concept totally_ordered_with = meta::totally_ordered && meta::totally_ordered && meta::common_reference_with< std::remove_reference_t const&, std::remove_reference_t const&> && meta::totally_ordered< meta::common_reference_t< std::remove_reference_t const&, std::remove_reference_t const&>> && meta::equality_comparable_with && requires(std::remove_reference_t const& t, std::remove_reference_t const& u) { { t < u } -> meta::boolean; { t > u } -> meta::boolean; { t <= u } -> meta::boolean; { t >= u } -> meta::boolean; { u < t } -> meta::boolean; { u > t } -> meta::boolean; { u <= t } -> meta::boolean; { u >= t } -> meta::boolean; }; Pre-C++20 implementation of the :concept:`std::totally_ordered_with ` concept. ---- Concept emulation ================= .. code-block:: cpp namespace mgs { namespace meta { template struct is_totally_ordered_with { /* ... */ }; template constexpr auto is_totally_ordered_with_v = is_totally_ordered_with::value; template >> using totally_ordered_with = T; } // namespace meta } // namespace mgs Example ======= .. code-block:: cpp #include using namespace mgs::meta; static_assert(is_totally_ordered_with_v, ""); static_assert(!is_totally_ordered_with_v>, ""); See also ======== * :ref:`totally_ordered` * :ref:`common_reference_with` * :ref:`boolean` * :ref:`equality_comparable_with` * :ref:`common_reference`