Unary minus operators

Synopses

Declared in <mp‐units/utility/constrained.h>

Negates the wrapped value

Computes the difference of lhs and rhs.

Subtracts a safe_int from an integral scalar, checking for overflow.

template<typename U>
requires (detail::integral<U> && detail::same_sign_v<U, T>)
[[nodiscard]]
constexpr
safe_int</* implementation-defined */, ErrorPolicy>
operator‐(
    U lhs,
    safe_int rhs);

Subtracts a safe_int from a floating‐point value.

template<typename U>
requires treat_as_floating_point<U>
[[nodiscard]]
constexpr
auto
operator‐(
    U lhs,
    safe_int rhs)
requires requires { lhs ‐ static_cast<U>(rhs.value_); };

Subtracts an integral scalar from a safe_int, checking for overflow.

template<typename U>
requires (detail::integral<U> && detail::same_sign_v<T, U>)
[[nodiscard]]
constexpr
safe_int</* implementation-defined */, ErrorPolicy>
operator‐(
    safe_int lhs,
    U rhs);

Subtracts a floating‐point value from a safe_int.

template<typename U>
requires treat_as_floating_point<U>
[[nodiscard]]
constexpr
auto
operator‐(
    safe_int lhs,
    U rhs)
requires requires { static_cast<U>(lhs.value_) ‐ rhs; };

Subtracts a constrained value from a safe_int

template<
    typename U,
    typename CP>
requires detail::integral<U>
[[nodiscard]]
constexpr
safe_int</* implementation-defined */, ErrorPolicy>
operator‐(
    safe_int lhs,
    constrained<U, CP> rhs);

Subtracts a non‐integral constrained value from a safe_int

template<
    typename U,
    typename CP>
requires (!std::integral<U>)
[[nodiscard]]
constexpr
constrained<decltype(std::declval<T>() ‐ std::declval<U>()), CP>
operator‐(
    safe_int lhs,
    constrained<U, CP> const& rhs);

Subtracts a safe_int from a constrained value

template<
    typename U,
    typename CP>
requires detail::integral<U>
[[nodiscard]]
constexpr
safe_int</* implementation-defined */, ErrorPolicy>
operator‐(
    constrained<U, CP> lhs,
    safe_int rhs);

Subtracts a safe_int from a non‐integral constrained value

template<
    typename U,
    typename CP>
requires (!std::integral<U>)
[[nodiscard]]
constexpr
constrained<decltype(std::declval<U>() ‐ std::declval<T>()), CP>
operator‐(
    constrained<U, CP> const& lhs,
    safe_int rhs);

Return Value

  • the wrapped result of negating x

  • the result of lhs ‐ rhs; triggers ErrorPolicy::on_overflow on overflow

  • the difference, as a safe_int of the promoted result type; triggers ErrorPolicy::on_overflow on overflow

  • the difference between lhs and the wrapped value

  • the difference between the wrapped value and rhs

  • the wrapped difference of the underlying values

Note

The return value should not be discarded.

Template Parameters

Name

Description

U

the integral scalar type

Parameters

Name

Description

x

the wrapped value to negate

lhs

the value to subtract from

rhs

the value to subtract

Created with MrDocs