[#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"] |=== | Name | xref:mp_units/utility/safe_int-07/error_policy.adoc[`error_policy`] | xref:mp_units/utility/safe_int-07/value_type.adoc[`value_type`] |=== == 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%=`] | Modulus assignment operator | xref:mp_units/utility/safe_int-07/operator_star_eq.adoc[`operator*=`] | Multiplication assignment operator | xref:mp_units/utility/safe_int-07/operator_plus.adoc[`operator+`] | Unary plus operator | 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+=`] | Addition assignment operator | xref:mp_units/utility/safe_int-07/operator_minus.adoc[`operator‐`] | Unary minus operator | 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‐=`] | Subtraction assignment operator | xref:mp_units/utility/safe_int-07/operator_slash_eq.adoc[`operator/=`] | Division assignment operator | xref:mp_units/utility/safe_int-07/value.adoc[`value`] | | xref:mp_units/utility/safe_int-07/2conversion.adoc[`operator T`] | Conversion to `T` |=== == Data Members [cols="1"] |=== | Name | xref:mp_units/utility/safe_int-07/value_.adoc[`value_`] |=== == Deduction Guides [cols="1"] |=== | Name | xref:mp_units/utility/safe_int-0b.adoc[`safe_int<T>`] |=== == Friends [cols="1,4"] |=== | Name| Description | `xref:mp_units/utility/operator_lshift.adoc[mp_units::utility::operator<<]` | Stream insertion operator | `xref:mp_units/utility/operator_3way-09a.adoc[mp_units::utility::operator<=>]` | Three‐way comparison operator | `xref:mp_units/utility/operator_eq-07.adoc[mp_units::utility::operator==]` | Equality operator | `xref:mp_units/utility/operator_slash-082.adoc[mp_units::utility::operator/]` | Division operator | `xref:mp_units/utility/operator_slash-04.adoc[mp_units::utility::operator/]` | Division operator | `xref:mp_units/utility/operator_star-0e4.adoc[mp_units::utility::operator*]` | Multiplication operator | `xref:mp_units/utility/operator_star-0e8.adoc[mp_units::utility::operator*]` | Multiplication operator | `xref:mp_units/utility/operator_minus-07.adoc[mp_units::utility::operator‐]` | Subtraction operator | `xref:mp_units/utility/operator_minus-01.adoc[mp_units::utility::operator‐]` | Subtraction operator | `xref:mp_units/utility/operator_plus-0fe8.adoc[mp_units::utility::operator+]` | Addition operator | `xref:mp_units/utility/operator_plus-06b.adoc[mp_units::utility::operator+]` | Addition operator | `xref:mp_units/utility/operator_mod-06.adoc[mp_units::utility::operator%]` | Modulus operator | `xref:mp_units/utility/operator_mod-0e.adoc[mp_units::utility::operator%]` | Modulus operator | `xref:mp_units/utility/operator_slash-09.adoc[mp_units::utility::operator/]` | Division operator | `xref:mp_units/utility/operator_slash-08b.adoc[mp_units::utility::operator/]` | Division operator | `xref:mp_units/utility/operator_star-049.adoc[mp_units::utility::operator*]` | Multiplication operator | `xref:mp_units/utility/operator_star-0b.adoc[mp_units::utility::operator*]` | Multiplication operator | `xref:mp_units/utility/operator_minus-0b.adoc[mp_units::utility::operator‐]` | Subtraction operator | `xref:mp_units/utility/operator_minus-05.adoc[mp_units::utility::operator‐]` | Subtraction operator | `xref:mp_units/utility/operator_plus-06f.adoc[mp_units::utility::operator+]` | Addition operator | `xref:mp_units/utility/operator_plus-02.adoc[mp_units::utility::operator+]` | Addition operator | `xref:mp_units/utility/operator_3way-021.adoc[mp_units::utility::operator<=>]` | Three‐way comparison operator | `xref:mp_units/utility/operator_eq-0e.adoc[mp_units::utility::operator==]` | Equality operator | `xref:mp_units/utility/operator_slash-05.adoc[mp_units::utility::operator/]` | | `xref:mp_units/utility/operator_slash-07.adoc[mp_units::utility::operator/]` | | `xref:mp_units/utility/operator_star-01.adoc[mp_units::utility::operator*]` | | `xref:mp_units/utility/operator_star-0a.adoc[mp_units::utility::operator*]` | | `xref:mp_units/utility/operator_minus-03.adoc[mp_units::utility::operator‐]` | | `xref:mp_units/utility/operator_minus-04.adoc[mp_units::utility::operator‐]` | | `xref:mp_units/utility/operator_plus-0fec.adoc[mp_units::utility::operator+]` | | `xref:mp_units/utility/operator_plus-0d.adoc[mp_units::utility::operator+]` | | `xref:mp_units/utility/operator_3way-097.adoc[mp_units::utility::operator<=>]` | Three‐way comparison operator | `xref:mp_units/utility/operator_eq-01.adoc[mp_units::utility::operator==]` | Equality operator | `xref:mp_units/utility/operator_mod-09.adoc[mp_units::utility::operator%]` | Modulus operator | `xref:mp_units/utility/operator_mod-04.adoc[mp_units::utility::operator%]` | Modulus operator | `xref:mp_units/utility/operator_slash-02.adoc[mp_units::utility::operator/]` | Division operator | `xref:mp_units/utility/operator_slash-0d.adoc[mp_units::utility::operator/]` | Division operator | `xref:mp_units/utility/operator_star-02.adoc[mp_units::utility::operator*]` | Multiplication operator | `xref:mp_units/utility/operator_star-04e.adoc[mp_units::utility::operator*]` | Multiplication operator | `xref:mp_units/utility/operator_minus-02.adoc[mp_units::utility::operator‐]` | Subtraction operator | `xref:mp_units/utility/operator_minus-0de.adoc[mp_units::utility::operator‐]` | Subtraction operator | `xref:mp_units/utility/operator_plus-0e9.adoc[mp_units::utility::operator+]` | Addition operator | `xref:mp_units/utility/operator_plus-0e0.adoc[mp_units::utility::operator+]` | Addition operator | `xref:mp_units/utility/operator_3way-06.adoc[mp_units::utility::operator<=>]` | Three‐way comparison operator | `xref:mp_units/utility/operator_eq-0b.adoc[mp_units::utility::operator==]` | Equality operator | `xref:mp_units/utility/operator_mod-0c.adoc[mp_units::utility::operator%]` | Modulus operator | `xref:mp_units/utility/operator_slash-0e.adoc[mp_units::utility::operator/]` | Division operator | `xref:mp_units/utility/operator_star-0c.adoc[mp_units::utility::operator*]` | Multiplication operator | `xref:mp_units/utility/operator_minus-09.adoc[mp_units::utility::operator‐]` | Subtraction operator | `xref:mp_units/utility/operator_plus-01.adoc[mp_units::utility::operator+]` | Addition operator |=== == Non-Member Functions [cols="1,4"] |=== | Name| Description | xref:mp_units/utility/detail/operator_mod-07.adoc[`detail::operator%`] | Modulus operator | xref:mp_units/utility/detail/operator_star-04.adoc[`detail::operator*`] | Multiplication operator | xref:mp_units/utility/detail/operator_plus-0f.adoc[`detail::operator+`] | Addition operator | xref:mp_units/utility/detail/operator_minus-03.adoc[`detail::operator‐`] | Subtraction operator | xref:mp_units/utility/detail/operator_slash-08.adoc[`detail::operator/`] | Division operator | xref:mp_units/utility/detail/operator_3way-09.adoc[`detail::operator<=>`] | Three‐way comparison operator | xref:mp_units/utility/detail/operator_eq-05.adoc[`detail::operator==`] | Equality operator |=== == 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]#