mp_units::utility::safe_int

Wraps an integral type with overflow detection.

Synopsis

Declared in <mp-units/utility/safe_int.h>

template<
    /* implementation-defined */ T,
    OverflowPolicy EP = safe_int_throw_policy>
class safe_int;

Description

This class wraps any integral type and models all requirements for mp-units representation types (RealScalar, UnitMagnitudeScalable, etc.). Every arithmetic operation checks for overflow and delegates to the ErrorPolicy::on_overflow() handler on detection.

Type Aliases

NameDescription
error_policy The ErrorPolicy used to react to overflow.
value_type The underlying integral type T.

Member Functions

NameDescription
safe_int [constructor]Constructors
operator%= Replaces the wrapped value with its remainder after division by rhs, reacting to ErrorPolicy on division by zero.
operator*= Multiplies the wrapped value by rhs, reacting to ErrorPolicy on overflow.
operator+ Returns a copy of the wrapped value, promoted as +value_ would promote T.
operator++ Increment operators
operator+= Adds rhs to the wrapped value, reacting to ErrorPolicy on overflow.
operator- Returns the negation of the wrapped value, reacting to ErrorPolicy on overflow.
operator-- Decrement operators
operator-= Subtracts rhs from the wrapped value, reacting to ErrorPolicy on overflow.
operator/= Divides the wrapped value by rhs, reacting to ErrorPolicy on overflow or division by zero.
value Returns the wrapped value.
operator T Converts to the wrapped value.

Data Members

NameDescription
value_ The wrapped value.

Deduction Guides

NameDescription
safe_int<T> Deduces safe_int<T> (with the default ErrorPolicy) from an integral value.

Friends

NameDescription
mp_units::utility::operator<<Streams a safe_int's wrapped value to an output stream
mp_units::utility::operator<=>Compares a safe_int with a constrained value
mp_units::utility::operator==Checks whether a safe_int and a constrained value are equal
mp_units::utility::operator/Divides a safe_int by a non-integral constrained value
mp_units::utility::operator/Divides a non-integral constrained value by a safe_int
mp_units::utility::operator*Multiplies a safe_int by a non-integral constrained value
mp_units::utility::operator*Multiplies a non-integral constrained value by a safe_int
mp_units::utility::operator-Subtracts a non-integral constrained value from a safe_int
mp_units::utility::operator-Subtracts a safe_int from a non-integral constrained value
mp_units::utility::operator+Adds a non-integral constrained value to a safe_int
mp_units::utility::operator+Adds a safe_int to a non-integral constrained value
mp_units::utility::operator%Computes the remainder of dividing a safe_int by a constrained value
mp_units::utility::operator%Computes the remainder of dividing a constrained value by a safe_int
mp_units::utility::operator/Divides a safe_int by a constrained value
mp_units::utility::operator/Divides a constrained value by a safe_int
mp_units::utility::operator*Multiplies a safe_int by a constrained value
mp_units::utility::operator*Multiplies a constrained value by a safe_int
mp_units::utility::operator-Subtracts a constrained value from a safe_int
mp_units::utility::operator-Subtracts a safe_int from a constrained value
mp_units::utility::operator+Adds a safe_int to a constrained value
mp_units::utility::operator+Adds a constrained value to a safe_int
mp_units::utility::operator<=>Compares a safe_int with a floating-point value.
mp_units::utility::operator==Checks whether a safe_int equals a floating-point value.
mp_units::utility::operator/Divides a floating-point value by a safe_int.
mp_units::utility::operator/Divides a safe_int by a floating-point value.
mp_units::utility::operator*Multiplies a floating-point value by a safe_int.
mp_units::utility::operator*Multiplies a safe_int by a floating-point value.
mp_units::utility::operator-Subtracts a safe_int from a floating-point value.
mp_units::utility::operator-Subtracts a floating-point value from a safe_int.
mp_units::utility::operator+Adds a safe_int to a floating-point value.
mp_units::utility::operator+Adds a floating-point value to a safe_int.
mp_units::utility::operator<=>Compares a safe_int with an integral scalar, comparing safely across signedness.
mp_units::utility::operator==Checks whether a safe_int equals an integral scalar, comparing safely across signedness.
mp_units::utility::operator%Computes the remainder of dividing an integral scalar by a safe_int.
mp_units::utility::operator%Computes the remainder of dividing a safe_int by an integral scalar.
mp_units::utility::operator/Divides an integral scalar by a safe_int, checking for overflow.
mp_units::utility::operator/Divides a safe_int by an integral scalar, checking for overflow.
mp_units::utility::operator*Multiplies an integral scalar by a safe_int, checking for overflow.
mp_units::utility::operator*Multiplies a safe_int by an integral scalar, checking for overflow.
mp_units::utility::operator-Subtracts a safe_int from an integral scalar, checking for overflow.
mp_units::utility::operator-Subtracts an integral scalar from a safe_int, checking for overflow.
mp_units::utility::operator+Adds a safe_int to an integral scalar, checking for overflow.
mp_units::utility::operator+Adds an integral scalar to a safe_int, checking for overflow.
mp_units::utility::operator<=>Compares two safe_int values by their wrapped underlying values.
mp_units::utility::operator==Checks whether two safe_int values wrap equal underlying values.
mp_units::utility::operator%Computes the remainder of dividing lhs by rhs.
mp_units::utility::operator/Computes the quotient of dividing lhs by rhs.
mp_units::utility::operator*Computes the product of lhs and rhs.
mp_units::utility::operator-Computes the difference of lhs and rhs.
mp_units::utility::operator+Computes the sum of lhs and rhs.

Template Parameters

NameDescription
Tthe underlying integral type (e.g. int, long, uint32_t)
ErrorPolicyhow to react to overflow — default: safe_int_throw_policy on hosted, safe_int_terminate_policy on freestanding