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

Name

Description

error_policy

The ErrorPolicy used to react to overflow.

value_type

The underlying integral type T.

Member Functions

Name

Description

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

Name

Description

value_

The wrapped value.

Deduction Guides

Name

Description

safe_int<T>

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

Friends

Name

Description

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

Name

Description

T

the underlying integral type (e.g. int, long, uint32_t)

ErrorPolicy

how to react to overflow — default: safe_int_throw_policy on hosted, safe_int_terminate_policy on freestanding

Created with MrDocs