[#mp_units-utility-safe_int-07] = xref:mp_units.adoc[mp_units]::xref:mp_units/utility.adoc[utility]::safe_int :relfileprefix: ../../ :mrdocs: Wraps an integral type with overflow detection. == Synopsis Declared in `<mp‐units/utility/safe_int.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template< /* implementation-defined */ T, xref:mp_units/utility/OverflowPolicy.adoc[OverflowPolicy] EP = xref:mp_units/utility/safe_int_throw_policy.adoc[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 [cols="1,4"] |=== | Name| Description | xref:mp_units/utility/safe_int-07/error_policy.adoc[`error_policy`] | The `ErrorPolicy` used to react to overflow. | xref:mp_units/utility/safe_int-07/value_type.adoc[`value_type`] | The underlying integral type `T`. |=== == Member Functions [cols="1,4"] |=== | Name| Description | xref:mp_units/utility/safe_int-07/2constructor-03.adoc[`safe_int`] [.small]#[constructor]# | Constructors | xref:mp_units/utility/safe_int-07/operator_mod_eq.adoc[`operator%=`] | Replaces the wrapped value with its remainder after division by `rhs,` reacting to `ErrorPolicy` on division by zero. | xref:mp_units/utility/safe_int-07/operator_star_eq.adoc[`operator*=`] | Multiplies the wrapped value by `rhs,` reacting to `ErrorPolicy` on overflow. | xref:mp_units/utility/safe_int-07/operator_plus.adoc[`operator+`] | Returns a copy of the wrapped value, promoted as `+value_` would promote `T`. | xref:mp_units/utility/safe_int-07/operator_inc-0ea.adoc[`operator++`] | Increment operators | xref:mp_units/utility/safe_int-07/operator_plus_eq.adoc[`operator+=`] | Adds `rhs` to the wrapped value, reacting to `ErrorPolicy` on overflow. | xref:mp_units/utility/safe_int-07/operator_minus.adoc[`operator‐`] | Returns the negation of the wrapped value, reacting to `ErrorPolicy` on overflow. | xref:mp_units/utility/safe_int-07/operator_dec-0f6.adoc[`operator‐‐`] | Decrement operators | xref:mp_units/utility/safe_int-07/operator_minus_eq.adoc[`operator‐=`] | Subtracts `rhs` from the wrapped value, reacting to `ErrorPolicy` on overflow. | xref:mp_units/utility/safe_int-07/operator_slash_eq.adoc[`operator/=`] | Divides the wrapped value by `rhs,` reacting to `ErrorPolicy` on overflow or division by zero. | xref:mp_units/utility/safe_int-07/value.adoc[`value`] | Returns the wrapped value. | xref:mp_units/utility/safe_int-07/2conversion.adoc[`operator T`] | Converts to the wrapped value. |=== == Data Members [cols="1,4"] |=== | Name| Description | xref:mp_units/utility/safe_int-07/value_.adoc[`value_`] | The wrapped value. |=== == Deduction Guides [cols="1,4"] |=== | Name| Description | xref:mp_units/utility/safe_int-0b.adoc[`safe_int<T>`] | Deduces `safe_int<T>` (with the default `ErrorPolicy`) from an integral value. |=== == Friends [cols="1,4"] |=== | Name| Description | `xref:mp_units/utility/operator_lshift.adoc[mp_units::utility::operator<<]` | Streams a safe_int's wrapped value to an output stream | `xref:mp_units/utility/operator_3way-09a.adoc[mp_units::utility::operator<=>]` | Compares a safe_int with a constrained value | `xref:mp_units/utility/operator_eq-07.adoc[mp_units::utility::operator==]` | Checks whether a safe_int and a constrained value are equal | `xref:mp_units/utility/operator_slash-082.adoc[mp_units::utility::operator/]` | Divides a safe_int by a non‐integral constrained value | `xref:mp_units/utility/operator_slash-04.adoc[mp_units::utility::operator/]` | Divides a non‐integral constrained value by a safe_int | `xref:mp_units/utility/operator_star-0e4.adoc[mp_units::utility::operator*]` | Multiplies a safe_int by a non‐integral constrained value | `xref:mp_units/utility/operator_star-0e8.adoc[mp_units::utility::operator*]` | Multiplies a non‐integral constrained value by a safe_int | `xref:mp_units/utility/operator_minus-07.adoc[mp_units::utility::operator‐]` | Subtracts a non‐integral constrained value from a safe_int | `xref:mp_units/utility/operator_minus-01.adoc[mp_units::utility::operator‐]` | Subtracts a safe_int from a non‐integral constrained value | `xref:mp_units/utility/operator_plus-0fe8.adoc[mp_units::utility::operator+]` | Adds a non‐integral constrained value to a safe_int | `xref:mp_units/utility/operator_plus-06b.adoc[mp_units::utility::operator+]` | Adds a safe_int to a non‐integral constrained value | `xref:mp_units/utility/operator_mod-06.adoc[mp_units::utility::operator%]` | Computes the remainder of dividing a safe_int by a constrained value | `xref:mp_units/utility/operator_mod-0e.adoc[mp_units::utility::operator%]` | Computes the remainder of dividing a constrained value by a safe_int | `xref:mp_units/utility/operator_slash-09.adoc[mp_units::utility::operator/]` | Divides a safe_int by a constrained value | `xref:mp_units/utility/operator_slash-08b.adoc[mp_units::utility::operator/]` | Divides a constrained value by a safe_int | `xref:mp_units/utility/operator_star-049.adoc[mp_units::utility::operator*]` | Multiplies a safe_int by a constrained value | `xref:mp_units/utility/operator_star-0b.adoc[mp_units::utility::operator*]` | Multiplies a constrained value by a safe_int | `xref:mp_units/utility/operator_minus-0b.adoc[mp_units::utility::operator‐]` | Subtracts a constrained value from a safe_int | `xref:mp_units/utility/operator_minus-05.adoc[mp_units::utility::operator‐]` | Subtracts a safe_int from a constrained value | `xref:mp_units/utility/operator_plus-06f.adoc[mp_units::utility::operator+]` | Adds a safe_int to a constrained value | `xref:mp_units/utility/operator_plus-02.adoc[mp_units::utility::operator+]` | Adds a constrained value to a safe_int | `xref:mp_units/utility/operator_3way-021.adoc[mp_units::utility::operator<=>]` | Compares a `safe_int` with a floating‐point value. | `xref:mp_units/utility/operator_eq-0e.adoc[mp_units::utility::operator==]` | Checks whether a `safe_int` equals a floating‐point value. | `xref:mp_units/utility/operator_slash-05.adoc[mp_units::utility::operator/]` | Divides a floating‐point value by a `safe_int`. | `xref:mp_units/utility/operator_slash-07.adoc[mp_units::utility::operator/]` | Divides a `safe_int` by a floating‐point value. | `xref:mp_units/utility/operator_star-01.adoc[mp_units::utility::operator*]` | Multiplies a floating‐point value by a `safe_int`. | `xref:mp_units/utility/operator_star-0a.adoc[mp_units::utility::operator*]` | Multiplies a `safe_int` by a floating‐point value. | `xref:mp_units/utility/operator_minus-03.adoc[mp_units::utility::operator‐]` | Subtracts a `safe_int` from a floating‐point value. | `xref:mp_units/utility/operator_minus-04.adoc[mp_units::utility::operator‐]` | Subtracts a floating‐point value from a `safe_int`. | `xref:mp_units/utility/operator_plus-0fec.adoc[mp_units::utility::operator+]` | Adds a `safe_int` to a floating‐point value. | `xref:mp_units/utility/operator_plus-0d.adoc[mp_units::utility::operator+]` | Adds a floating‐point value to a `safe_int`. | `xref:mp_units/utility/operator_3way-097.adoc[mp_units::utility::operator<=>]` | Compares a `safe_int` with an integral scalar, comparing safely across signedness. | `xref:mp_units/utility/operator_eq-01.adoc[mp_units::utility::operator==]` | Checks whether a `safe_int` equals an integral scalar, comparing safely across signedness. | `xref:mp_units/utility/operator_mod-09.adoc[mp_units::utility::operator%]` | Computes the remainder of dividing an integral scalar by a `safe_int`. | `xref:mp_units/utility/operator_mod-04.adoc[mp_units::utility::operator%]` | Computes the remainder of dividing a `safe_int` by an integral scalar. | `xref:mp_units/utility/operator_slash-02.adoc[mp_units::utility::operator/]` | Divides an integral scalar by a `safe_int`, checking for overflow. | `xref:mp_units/utility/operator_slash-0d.adoc[mp_units::utility::operator/]` | Divides a `safe_int` by an integral scalar, checking for overflow. | `xref:mp_units/utility/operator_star-02.adoc[mp_units::utility::operator*]` | Multiplies an integral scalar by a `safe_int`, checking for overflow. | `xref:mp_units/utility/operator_star-04e.adoc[mp_units::utility::operator*]` | Multiplies a `safe_int` by an integral scalar, checking for overflow. | `xref:mp_units/utility/operator_minus-02.adoc[mp_units::utility::operator‐]` | Subtracts a `safe_int` from an integral scalar, checking for overflow. | `xref:mp_units/utility/operator_minus-0de.adoc[mp_units::utility::operator‐]` | Subtracts an integral scalar from a `safe_int`, checking for overflow. | `xref:mp_units/utility/operator_plus-0e9.adoc[mp_units::utility::operator+]` | Adds a `safe_int` to an integral scalar, checking for overflow. | `xref:mp_units/utility/operator_plus-0e0.adoc[mp_units::utility::operator+]` | Adds an integral scalar to a `safe_int`, checking for overflow. | `xref:mp_units/utility/operator_3way-06.adoc[mp_units::utility::operator<=>]` | Compares two `safe_int` values by their wrapped underlying values. | `xref:mp_units/utility/operator_eq-0b.adoc[mp_units::utility::operator==]` | Checks whether two `safe_int` values wrap equal underlying values. | `xref:mp_units/utility/operator_mod-0c.adoc[mp_units::utility::operator%]` | Computes the remainder of dividing `lhs` by `rhs.` | `xref:mp_units/utility/operator_slash-0e.adoc[mp_units::utility::operator/]` | Computes the quotient of dividing `lhs` by `rhs.` | `xref:mp_units/utility/operator_star-0c.adoc[mp_units::utility::operator*]` | Computes the product of `lhs` and `rhs.` | `xref:mp_units/utility/operator_minus-09.adoc[mp_units::utility::operator‐]` | Computes the difference of `lhs` and `rhs.` | `xref:mp_units/utility/operator_plus-01.adoc[mp_units::utility::operator+]` | Computes the sum of `lhs` and `rhs.` |=== == Template Parameters [cols="1,4"] |=== | 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 |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#