= Reference
:mrdocs:

== Namespaces

[cols=1]
|===
| Name
| link:#mp_units[`mp&lowbar;units`] 
|===

== link:#mp_units[mp&lowbar;units] namespace

=== Types

[cols=2]
|===
| Name
| Description
| link:#mp_units-absolute_point_origin[`absolute&lowbar;point&lowbar;origin`] 
| 
| link:#mp_units-base_dimension[`base&lowbar;dimension`] 
| A dimension of a base quantity
| link:#mp_units-basic_fixed_string-08[`basic&lowbar;fixed&lowbar;string`] 
| A compile&hyphen;time fixed string
| link:#mp_units-binomial_distribution-0e[`binomial&lowbar;distribution`] 
| 
| link:#mp_units-binomial_distribution-08[`binomial&lowbar;distribution`] 
| 
| link:#mp_units-cartesian_vector-08[`cartesian&lowbar;vector`] 
| 
| link:#mp_units-cauchy_distribution-04[`cauchy&lowbar;distribution`] 
| 
| link:#mp_units-cauchy_distribution-0b[`cauchy&lowbar;distribution`] 
| 
| link:#mp_units-chi_squared_distribution-0b[`chi&lowbar;squared&lowbar;distribution`] 
| 
| link:#mp_units-chi_squared_distribution-08[`chi&lowbar;squared&lowbar;distribution`] 
| 
| link:#mp_units-common_unit[`common&lowbar;unit`] 
| Measurement unit for an accumulation of two quantities of different units
| link:#mp_units-delta_[`delta&lowbar;`] 
| 
| link:#mp_units-derived_dimension[`derived&lowbar;dimension`] 
| A dimension of a derived quantity
| link:#mp_units-derived_quantity_spec[`derived&lowbar;quantity&lowbar;spec`] 
| A specification of a derived quantity
| link:#mp_units-derived_unit[`derived&lowbar;unit`] 
| Measurement unit for a derived quantity
| link:#mp_units-dimension_one-063[`dimension&lowbar;one`] 
| Dimension one
| link:#mp_units-dimension_symbol_formatting[`dimension&lowbar;symbol&lowbar;formatting`] 
| 
| link:#mp_units-dimensionless-0f[`dimensionless`] 
| Quantity of dimension one
| link:#mp_units-discrete_distribution-08[`discrete&lowbar;distribution`] 
| 
| link:#mp_units-discrete_distribution-05[`discrete&lowbar;distribution`] 
| 
| link:#mp_units-exponential_distribution-0e[`exponential&lowbar;distribution`] 
| 
| link:#mp_units-exponential_distribution-08[`exponential&lowbar;distribution`] 
| 
| link:#mp_units-extreme_value_distribution-0e[`extreme&lowbar;value&lowbar;distribution`] 
| 
| link:#mp_units-extreme_value_distribution-0d[`extreme&lowbar;value&lowbar;distribution`] 
| 
| link:#mp_units-fisher_f_distribution-02[`fisher&lowbar;f&lowbar;distribution`] 
| 
| link:#mp_units-fisher_f_distribution-08[`fisher&lowbar;f&lowbar;distribution`] 
| 
| link:#mp_units-gamma_distribution-0a4[`gamma&lowbar;distribution`] 
| 
| link:#mp_units-gamma_distribution-0a8[`gamma&lowbar;distribution`] 
| 
| link:#mp_units-geometric_distribution-08[`geometric&lowbar;distribution`] 
| 
| link:#mp_units-geometric_distribution-06[`geometric&lowbar;distribution`] 
| 
| link:#mp_units-is_kind-06[`is&lowbar;kind`] 
| 
| link:#mp_units-kind_of_-00[`kind&lowbar;of&lowbar;`] 
| 
| link:#mp_units-kind_of_-0d[`kind&lowbar;of&lowbar;&lt;Q&gt;`] 
| 
| link:#mp_units-lognormal_distribution-0e[`lognormal&lowbar;distribution`] 
| 
| link:#mp_units-lognormal_distribution-08[`lognormal&lowbar;distribution`] 
| 
| link:#mp_units-mag_constant[`mag&lowbar;constant`] 
| 
| link:#mp_units-named_unit-0ec[`named&lowbar;unit`] 
| A named unit
| link:#mp_units-named_unit-06[`named&lowbar;unit&lt;Symbol&gt;`] 
| Specialization for a unit that can be reused by several base quantities
| link:#mp_units-named_unit-07[`named&lowbar;unit&lt;Symbol, U&gt;`] 
| Specialization for unit of a specified base quantity
| link:#mp_units-named_unit-05[`named&lowbar;unit&lt;Symbol, U, QS&gt;`] 
| Specialization for a unit with special name valid only for a specific quantity
| link:#mp_units-named_unit-0e4[`named&lowbar;unit&lt;Symbol, U, QS, PO&gt;`] 
| 
| link:#mp_units-negative_binomial_distribution-0f[`negative&lowbar;binomial&lowbar;distribution`] 
| 
| link:#mp_units-negative_binomial_distribution-09[`negative&lowbar;binomial&lowbar;distribution`] 
| 
| link:#mp_units-normal_distribution-0a[`normal&lowbar;distribution`] 
| 
| link:#mp_units-normal_distribution-04[`normal&lowbar;distribution`] 
| 
| link:#mp_units-one-0f[`one`] 
| Unit one
| link:#mp_units-parts_per_million-0f[`parts&lowbar;per&lowbar;million`] 
| 
| link:#mp_units-per[`per`] 
| Type list type storing the list of components with negative exponents
| link:#mp_units-per_mille-01[`per&lowbar;mille`] 
| 
| link:#mp_units-percent-02[`percent`] 
| 
| link:#mp_units-pi-0c[`pi`] 
| 
| link:#mp_units-piecewise_constant_distribution-0d[`piecewise&lowbar;constant&lowbar;distribution`] 
| 
| link:#mp_units-piecewise_constant_distribution-0a[`piecewise&lowbar;constant&lowbar;distribution`] 
| 
| link:#mp_units-piecewise_linear_distribution-059[`piecewise&lowbar;linear&lowbar;distribution`] 
| 
| link:#mp_units-piecewise_linear_distribution-050[`piecewise&lowbar;linear&lowbar;distribution`] 
| 
| link:#mp_units-point_[`point&lowbar;`] 
| 
| link:#mp_units-poisson_distribution-098[`poisson&lowbar;distribution`] 
| 
| link:#mp_units-poisson_distribution-09c[`poisson&lowbar;distribution`] 
| 
| link:#mp_units-power[`power`] 
| Type container for exponents with ratio different than `1`
| link:#mp_units-prefixed_unit[`prefixed&lowbar;unit`] 
| A prefixed unit
| link:#mp_units-quantity-01[`quantity`] 
| A quantity
| link:#mp_units-quantity_like_traits[`quantity&lowbar;like&lowbar;traits`] 
| Provides support for external quantity&hyphen;like types
| link:#mp_units-quantity_point-08[`quantity&lowbar;point`] 
| A quantity point
| link:#mp_units-quantity_point_like_traits[`quantity&lowbar;point&lowbar;like&lowbar;traits`] 
| Provides support for external quantity point&hyphen;like types
| link:#mp_units-quantity_spec-09[`quantity&lowbar;spec`] 
| 
| link:#mp_units-quantity_spec-0a6[`quantity&lowbar;spec&lt;QS, Args&period;&period;&period;&gt;`] 
| 
| link:#mp_units-quantity_spec-0a0[`quantity&lowbar;spec&lt;QS, Eq, Args&period;&period;&period;&gt;`] 
| 
| link:#mp_units-reference[`reference`] 
| Quantity reference type
| link:#mp_units-relative_point_origin[`relative&lowbar;point&lowbar;origin`] 
| 
| link:#mp_units-representation_values[`representation&lowbar;values`] 
| A type trait that defines zero, one, min, and max for a representation type
| link:#mp_units-scaled_unit[`scaled&lowbar;unit`] 
| Unit being a scaled version of another unit
| link:#mp_units-student_t_distribution-0b[`student&lowbar;t&lowbar;distribution`] 
| 
| link:#mp_units-student_t_distribution-0c[`student&lowbar;t&lowbar;distribution`] 
| 
| link:#mp_units-symbol_text-032[`symbol&lowbar;text`] 
| A symbol text representation
| link:#mp_units-system_reference[`system&lowbar;reference`] 
| System&hyphen;specific reference
| link:#mp_units-uniform_int_distribution-08[`uniform&lowbar;int&lowbar;distribution`] 
| 
| link:#mp_units-uniform_int_distribution-0e[`uniform&lowbar;int&lowbar;distribution`] 
| 
| link:#mp_units-uniform_real_distribution-0c[`uniform&lowbar;real&lowbar;distribution`] 
| 
| link:#mp_units-uniform_real_distribution-05[`uniform&lowbar;real&lowbar;distribution`] 
| 
| link:#mp_units-unit_symbol_formatting[`unit&lowbar;symbol&lowbar;formatting`] 
| 
| link:#mp_units-weibull_distribution-0d[`weibull&lowbar;distribution`] 
| 
| link:#mp_units-weibull_distribution-04[`weibull&lowbar;distribution`] 
| 
| link:#mp_units-zeroth_point_origin_[`zeroth&lowbar;point&lowbar;origin&lowbar;`] 
| 
| link:#mp_units-conditional[`conditional`] 
| 
| link:#mp_units-expr_type[`expr&lowbar;type`] 
| 
| link:#mp_units-fixed_string[`fixed&lowbar;string`] 
| 
| link:#mp_units-fixed_u16string[`fixed&lowbar;u16string`] 
| 
| link:#mp_units-fixed_u32string[`fixed&lowbar;u32string`] 
| 
| link:#mp_units-fixed_u8string[`fixed&lowbar;u8string`] 
| 
| link:#mp_units-fixed_wstring[`fixed&lowbar;wstring`] 
| 
| link:#mp_units-is_same[`is&lowbar;same`] 
| 
| link:#mp_units-quantity_values[`quantity&lowbar;values`] 
| 
| link:#mp_units-text_encoding[`text&lowbar;encoding`] 
| 
| link:#mp_units-value_type_t[`value&lowbar;type&lowbar;t`] 
| 
| link:#mp_units-wrapped_type_t[`wrapped&lowbar;type&lowbar;t`] 
| 
|===

=== Enums

[cols=2]
|===
| Name
| Description
| link:#mp_units-character_set[`character&lowbar;set`] 
| 
| link:#mp_units-quantity_character[`quantity&lowbar;character`] 
| Quantity character
| link:#mp_units-unit_symbol_separator[`unit&lowbar;symbol&lowbar;separator`] 
| 
| link:#mp_units-unit_symbol_solidus[`unit&lowbar;symbol&lowbar;solidus`] 
| 
|===

=== Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-abs[`abs`] 
| Computes the absolute value of a quantity
| link:#mp_units-castable[`castable`] 
| 
| link:#mp_units-cbrt-07[`cbrt`] 
| `cbrt` overloads
| link:#mp_units-ceil[`ceil`] 
| Computes the smallest quantity with integer representation and unit type To with its number not less than q
| link:#mp_units-contains-01b[`contains`] 
| 
| link:#mp_units-cubic[`cubic`] 
| Computes the cubic power of a unit
| link:#mp_units-default_point_origin[`default&lowbar;point&lowbar;origin`] 
| 
| link:#mp_units-dimension_symbol[`dimension&lowbar;symbol`] 
| 
| link:#mp_units-dimension_symbol_to[`dimension&lowbar;symbol&lowbar;to`] 
| 
| link:#mp_units-epsilon[`epsilon`] 
| Returns the epsilon of the quantity
| link:#mp_units-exp[`exp`] 
| Computes Euler&apos;s raised to the given power
| link:#mp_units-explicitly_convertible[`explicitly&lowbar;convertible`] 
| 
| link:#mp_units-floor[`floor`] 
| Computes the largest quantity with integer representation and unit type To with its number not greater than q
| link:#mp_units-fma-0c[`fma`] 
| `fma` overloads
| link:#mp_units-fmod[`fmod`] 
| Computes the floating&hyphen;point remainder of the division operation x &sol; y&period;
| link:#mp_units-get-0a[`get`] 
| 
| link:#mp_units-get_canonical_unit[`get&lowbar;canonical&lowbar;unit`] 
| 
| link:#mp_units-get_common_quantity_spec-08[`get&lowbar;common&lowbar;quantity&lowbar;spec`] 
| 
| link:#mp_units-get_common_reference[`get&lowbar;common&lowbar;reference`] 
| 
| link:#mp_units-get_common_unit-08f[`get&lowbar;common&lowbar;unit`] 
| 
| link:#mp_units-get_kind[`get&lowbar;kind`] 
| 
| link:#mp_units-get_quantity_spec-021[`get&lowbar;quantity&lowbar;spec`] 
| 
| link:#mp_units-get_unit-02[`get&lowbar;unit`] 
| 
| link:#mp_units-hypot-00[`hypot`] 
| `hypot` overloads
| link:#mp_units-implicitly_convertible[`implicitly&lowbar;convertible`] 
| 
| link:#mp_units-interconvertible[`interconvertible`] 
| 
| link:#mp_units-inverse-0e[`inverse`] 
| Computes the inverse of a quantity in a provided unit
| link:#mp_units-is_eq_zero[`is&lowbar;eq&lowbar;zero`] 
| 
| link:#mp_units-is_gt_zero[`is&lowbar;gt&lowbar;zero`] 
| 
| link:#mp_units-is_gteq_zero[`is&lowbar;gteq&lowbar;zero`] 
| 
| link:#mp_units-is_lt_zero[`is&lowbar;lt&lowbar;zero`] 
| 
| link:#mp_units-is_lteq_zero[`is&lowbar;lteq&lowbar;zero`] 
| 
| link:#mp_units-is_neq_zero[`is&lowbar;neq&lowbar;zero`] 
| 
| link:#mp_units-isfinite-01[`isfinite`] 
| `isfinite` overloads
| link:#mp_units-isinf-0c[`isinf`] 
| `isinf` overloads
| link:#mp_units-isnan-08c[`isnan`] 
| `isnan` overloads
| link:#mp_units-lerp[`lerp`] 
| Linear interpolation or extrapolation
| link:#mp_units-magnitude-0c[`magnitude`] 
| 
| link:#mp_units-midpoint[`midpoint`] 
| Computes the midpoint of two points
| link:#mp_units-operator_mod-01[`operator%`] 
| Modulus operators
| link:#mp_units-operator_star-000[`operator&ast;`] 
| Multiplication operators
| link:#mp_units-operator_plus-0ad[`operator&plus;`] 
| Addition operators
| link:#mp_units-operator_minus-0c[`operator&hyphen;`] 
| Subtraction operators
| link:#mp_units-operator_slash-0a8[`operator&sol;`] 
| Division operators
| link:#mp_units-pow-00[`pow`] 
| `pow` overloads
| link:#mp_units-quantity_cast-0f[`quantity&lowbar;cast`] 
| `quantity&lowbar;cast` overloads
| link:#mp_units-remainder[`remainder`] 
| Computes the IEEE remainder of the floating point division operation x &sol; y&period;
| link:#mp_units-round[`round`] 
| Computes the nearest quantity with integer representation and unit type `To` to `q`
| link:#mp_units-sqrt-0c[`sqrt`] 
| `sqrt` overloads
| link:#mp_units-square[`square`] 
| Computes the square power of a unit
| link:#mp_units-swap[`swap`] 
| 
| link:#mp_units-unit_symbol[`unit&lowbar;symbol`] 
| 
| link:#mp_units-unit_symbol_to[`unit&lowbar;symbol&lowbar;to`] 
| 
| link:#mp_units-unit_vector[`unit&lowbar;vector`] 
| 
| link:#mp_units-value_cast-03[`value&lowbar;cast`] 
| `value&lowbar;cast` overloads
| link:#mp_units-operator_lshift-0e9[`operator&lt;&lt;`] 
| Stream insertion operators
| link:#mp_units-operator_eq-0c[`operator&equals;&equals;`] 
| Equality operators
| link:#mp_units-operator_3way-06[`operator&lt;&equals;&gt;`] 
| Three&hyphen;way comparison operators
|===

=== Variables

[cols=2]
|===
| Name
| Description
| link:#mp_units-absolute[`absolute`] 
| 
| link:#mp_units-delta[`delta`] 
| 
| link:#mp_units-dimension_one-060[`dimension&lowbar;one`] 
| 
| link:#mp_units-dimensionless-03[`dimensionless`] 
| Quantity of dimension one
| link:#mp_units-disable_real-00[`disable&lowbar;real`] 
| &sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol; REAL SCALAR &sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;
| link:#mp_units-disable_real-0b[`disable&lowbar;real&lt;bool&gt;`] 
| 
| link:#mp_units-imag[`imag`] 
| 
| link:#mp_units-is_complex[`is&lowbar;complex`] 
| 
| link:#mp_units-is_derived_from_specialization_of[`is&lowbar;derived&lowbar;from&lowbar;specialization&lowbar;of`] 
| 
| link:#mp_units-is_derived_from_specialization_of_v[`is&lowbar;derived&lowbar;from&lowbar;specialization&lowbar;of&lowbar;v`] 
| 
| link:#mp_units-is_kind-0b[`is&lowbar;kind`] 
| 
| link:#mp_units-is_same_v-0d[`is&lowbar;same&lowbar;v`] 
| 
| link:#mp_units-is_same_v-0e[`is&lowbar;same&lowbar;v&lt;T, T&gt;`] 
| 
| link:#mp_units-is_scalar[`is&lowbar;scalar`] 
| 
| link:#mp_units-is_specialization_of-06[`is&lowbar;specialization&lowbar;of`] 
| 
| link:#mp_units-is_specialization_of-0b[`is&lowbar;specialization&lowbar;of&lt;Type&lt;Params&period;&period;&period;&gt;, Type&gt;`] 
| 
| link:#mp_units-is_specialization_of_v-01[`is&lowbar;specialization&lowbar;of&lowbar;v`] 
| 
| link:#mp_units-is_specialization_of_v-08[`is&lowbar;specialization&lowbar;of&lowbar;v&lt;Type&lt;Params&period;&period;&period;&gt;, Type&gt;`] 
| 
| link:#mp_units-is_tensor[`is&lowbar;tensor`] 
| 
| link:#mp_units-is_value_preserving[`is&lowbar;value&lowbar;preserving`] 
| Specifies if a specific conversion between two types preserves the value
| link:#mp_units-is_vector[`is&lowbar;vector`] 
| 
| link:#mp_units-kind_of[`kind&lowbar;of`] 
| 
| link:#mp_units-known_first_factor[`known&lowbar;first&lowbar;factor`] 
| &sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;
| link:#mp_units-mag[`mag`] 
| 
| link:#mp_units-mag_pi[`mag&lowbar;pi`] 
| 
| link:#mp_units-mag_power[`mag&lowbar;power`] 
| Create a Magnitude which is some rational number raised to a rational power&period;
| link:#mp_units-mag_ratio[`mag&lowbar;ratio`] 
| 
| link:#mp_units-magnitude-04[`magnitude`] 
| 
| link:#mp_units-modulus[`modulus`] 
| 
| link:#mp_units-one-07[`one`] 
| 
| link:#mp_units-parts_per_million-0a[`parts&lowbar;per&lowbar;million`] 
| 
| link:#mp_units-per_mille-08[`per&lowbar;mille`] 
| 
| link:#mp_units-percent-0a[`percent`] 
| 
| link:#mp_units-pi-0f[`pi`] 
| 
| link:#mp_units-point[`point`] 
| 
| link:#mp_units-ppm[`ppm`] 
| 
| link:#mp_units-real[`real`] 
| 
| link:#mp_units-space_before_unit_symbol[`space&lowbar;before&lowbar;unit&lowbar;symbol`] 
| Puts a space &apos; &apos; sign before a unit symbol
| link:#mp_units-treat_as_floating_point[`treat&lowbar;as&lowbar;floating&lowbar;point`] 
| Specifies if a value of a type should be treated as a floating&hyphen;point value
| link:#mp_units-zeroth_point_origin[`zeroth&lowbar;point&lowbar;origin`] 
| 
| link:#mp_units-π[`π`] 
| 
|===

=== Concepts

[cols=2]
|===
| Name
| Description
| link:#mp_units-AssociatedUnit[`AssociatedUnit`] 
| A concept matching all units that can be used as quantity references
| link:#mp_units-Dimension[`Dimension`] 
| A concept matching all dimensions in the library&period;
| link:#mp_units-DimensionOf[`DimensionOf`] 
| A concept checking if the argument is of the same dimension&period;
| link:#mp_units-PointOrigin[`PointOrigin`] 
| A concept matching all quantity point origins in the library
| link:#mp_units-PointOriginFor[`PointOriginFor`] 
| A concept matching all quantity point origins for a specified quantity type in the library
| link:#mp_units-PrefixableUnit[`PrefixableUnit`] 
| A concept to be used to define prefixes for a unit
| link:#mp_units-Quantity[`Quantity`] 
| A concept matching all quantities in the library
| link:#mp_units-QuantityLike[`QuantityLike`] 
| A concept matching all external quantities like types
| link:#mp_units-QuantityOf[`QuantityOf`] 
| A concept matching all quantities of the provided quantity spec
| link:#mp_units-QuantityPoint[`QuantityPoint`] 
| A concept matching all quantity points in the library
| link:#mp_units-QuantityPointLike[`QuantityPointLike`] 
| A concept matching all external quantity point like types
| link:#mp_units-QuantityPointOf[`QuantityPointOf`] 
| A concept matching all quantity points of the provided property
| link:#mp_units-QuantitySpec[`QuantitySpec`] 
| 
| link:#mp_units-QuantitySpecOf[`QuantitySpecOf`] 
| A concept matching all quantity specifications of a provided quantity spec value
| link:#mp_units-Reference[`Reference`] 
| A concept matching all references in the library&period;
| link:#mp_units-ReferenceOf[`ReferenceOf`] 
| A concept matching all references of the provided quantity spec
| link:#mp_units-RepresentationOf[`RepresentationOf`] 
| 
| link:#mp_units-Unit[`Unit`] 
| A concept matching all unit types in the library
| link:#mp_units-UnitMagnitude[`UnitMagnitude`] 
| Concept to detect whether T is a valid UnitMagnitude&period;
| link:#mp_units-UnitOf[`UnitOf`] 
| A concept matching all units associated with the provided quantity spec
|===

=== Deduction Guides

[cols=1]
|===
| Name
| link:#mp_units-basic_fixed_string-0d[`basic&lowbar;fixed&lowbar;string&lt;CharT, N &hyphen; 1&gt;`] 
| link:#mp_units-basic_fixed_string-0f[`basic&lowbar;fixed&lowbar;string&lt;CharT, 1 &plus; sizeof&period;&period;&period;(Rest)&gt;`] 
| link:#mp_units-basic_fixed_string-0a[`basic&lowbar;fixed&lowbar;string&lt;CharT, N&gt;`] 
| link:#mp_units-cartesian_vector-05[`cartesian&lowbar;vector&lt;std::common&lowbar;type&lowbar;t&lt;Arg, Args&period;&period;&period;&gt;&gt;`] 
| link:#mp_units-quantity-05[`quantity&lt;quantity&lowbar;like&lowbar;traits&lt;Q&gt;&colon;&colon;reference, quantity&lowbar;like&lowbar;traits&lt;Q&gt;::rep&gt;`] 
| link:#mp_units-quantity-02[`quantity&lt;R&lcub;&rcub;, Value&gt;`] 
| link:#mp_units-quantity_point-04[`quantity&lowbar;point&lt;Q&colon;&colon;reference, default&lowbar;point&lowbar;origin(Q&colon;&colon;reference), Q::rep&gt;`] 
| link:#mp_units-quantity_point-0cb[`quantity&lowbar;point&lt;quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;reference, quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;point&lowbar;origin, quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;::rep&gt;`] 
| link:#mp_units-quantity_point-0c5[`quantity&lowbar;point&lt;Q&colon;&colon;reference, PO&lcub;&rcub;, Q::rep&gt;`] 
| link:#mp_units-symbol_text-06[`symbol&lowbar;text&lt;1, 1&gt;`] 
| link:#mp_units-symbol_text-07[`symbol&lowbar;text&lt;N, N&gt;`] 
| link:#mp_units-symbol_text-03f[`symbol&lowbar;text&lt;N &hyphen; 1, N &hyphen; 1&gt;`] 
| link:#mp_units-symbol_text-0f[`symbol&lowbar;text&lt;N, M&gt;`] 
| link:#mp_units-symbol_text-01[`symbol&lowbar;text&lt;N &hyphen; 1, M &hyphen; 1&gt;`] 
|===

== Types

[cols=2]
|===
| Name
| Description
| link:#mp_units-absolute_point_origin[`absolute&lowbar;point&lowbar;origin`] 
| 
| link:#mp_units-base_dimension[`base&lowbar;dimension`] 
| A dimension of a base quantity
| link:#mp_units-basic_fixed_string-08[`basic&lowbar;fixed&lowbar;string`] 
| A compile&hyphen;time fixed string
| link:#mp_units-binomial_distribution-0e[`binomial&lowbar;distribution`] 
| 
| link:#mp_units-binomial_distribution-08[`binomial&lowbar;distribution`] 
| 
| link:#mp_units-cartesian_vector-08[`cartesian&lowbar;vector`] 
| 
| link:#mp_units-cauchy_distribution-04[`cauchy&lowbar;distribution`] 
| 
| link:#mp_units-cauchy_distribution-0b[`cauchy&lowbar;distribution`] 
| 
| link:#mp_units-chi_squared_distribution-0b[`chi&lowbar;squared&lowbar;distribution`] 
| 
| link:#mp_units-chi_squared_distribution-08[`chi&lowbar;squared&lowbar;distribution`] 
| 
| link:#mp_units-common_unit[`common&lowbar;unit`] 
| Measurement unit for an accumulation of two quantities of different units
| link:#mp_units-delta_[`delta&lowbar;`] 
| 
| link:#mp_units-derived_dimension[`derived&lowbar;dimension`] 
| A dimension of a derived quantity
| link:#mp_units-derived_quantity_spec[`derived&lowbar;quantity&lowbar;spec`] 
| A specification of a derived quantity
| link:#mp_units-derived_unit[`derived&lowbar;unit`] 
| Measurement unit for a derived quantity
| link:#mp_units-dimension_one-063[`dimension&lowbar;one`] 
| Dimension one
| link:#mp_units-dimension_symbol_formatting[`dimension&lowbar;symbol&lowbar;formatting`] 
| 
| link:#mp_units-dimensionless-0f[`dimensionless`] 
| Quantity of dimension one
| link:#mp_units-discrete_distribution-08[`discrete&lowbar;distribution`] 
| 
| link:#mp_units-discrete_distribution-05[`discrete&lowbar;distribution`] 
| 
| link:#mp_units-exponential_distribution-0e[`exponential&lowbar;distribution`] 
| 
| link:#mp_units-exponential_distribution-08[`exponential&lowbar;distribution`] 
| 
| link:#mp_units-extreme_value_distribution-0e[`extreme&lowbar;value&lowbar;distribution`] 
| 
| link:#mp_units-extreme_value_distribution-0d[`extreme&lowbar;value&lowbar;distribution`] 
| 
| link:#mp_units-fisher_f_distribution-02[`fisher&lowbar;f&lowbar;distribution`] 
| 
| link:#mp_units-fisher_f_distribution-08[`fisher&lowbar;f&lowbar;distribution`] 
| 
| link:#mp_units-gamma_distribution-0a4[`gamma&lowbar;distribution`] 
| 
| link:#mp_units-gamma_distribution-0a8[`gamma&lowbar;distribution`] 
| 
| link:#mp_units-geometric_distribution-08[`geometric&lowbar;distribution`] 
| 
| link:#mp_units-geometric_distribution-06[`geometric&lowbar;distribution`] 
| 
| link:#mp_units-is_kind-06[`is&lowbar;kind`] 
| 
| link:#mp_units-kind_of_-00[`kind&lowbar;of&lowbar;`] 
| 
| link:#mp_units-kind_of_-0d[`kind&lowbar;of&lowbar;&lt;Q&gt;`] 
| 
| link:#mp_units-lognormal_distribution-0e[`lognormal&lowbar;distribution`] 
| 
| link:#mp_units-lognormal_distribution-08[`lognormal&lowbar;distribution`] 
| 
| link:#mp_units-mag_constant[`mag&lowbar;constant`] 
| 
| link:#mp_units-named_unit-0ec[`named&lowbar;unit`] 
| A named unit
| link:#mp_units-named_unit-06[`named&lowbar;unit&lt;Symbol&gt;`] 
| Specialization for a unit that can be reused by several base quantities
| link:#mp_units-named_unit-07[`named&lowbar;unit&lt;Symbol, U&gt;`] 
| Specialization for unit of a specified base quantity
| link:#mp_units-named_unit-05[`named&lowbar;unit&lt;Symbol, U, QS&gt;`] 
| Specialization for a unit with special name valid only for a specific quantity
| link:#mp_units-named_unit-0e4[`named&lowbar;unit&lt;Symbol, U, QS, PO&gt;`] 
| 
| link:#mp_units-negative_binomial_distribution-0f[`negative&lowbar;binomial&lowbar;distribution`] 
| 
| link:#mp_units-negative_binomial_distribution-09[`negative&lowbar;binomial&lowbar;distribution`] 
| 
| link:#mp_units-normal_distribution-0a[`normal&lowbar;distribution`] 
| 
| link:#mp_units-normal_distribution-04[`normal&lowbar;distribution`] 
| 
| link:#mp_units-one-0f[`one`] 
| Unit one
| link:#mp_units-parts_per_million-0f[`parts&lowbar;per&lowbar;million`] 
| 
| link:#mp_units-per[`per`] 
| Type list type storing the list of components with negative exponents
| link:#mp_units-per_mille-01[`per&lowbar;mille`] 
| 
| link:#mp_units-percent-02[`percent`] 
| 
| link:#mp_units-pi-0c[`pi`] 
| 
| link:#mp_units-piecewise_constant_distribution-0d[`piecewise&lowbar;constant&lowbar;distribution`] 
| 
| link:#mp_units-piecewise_constant_distribution-0a[`piecewise&lowbar;constant&lowbar;distribution`] 
| 
| link:#mp_units-piecewise_linear_distribution-059[`piecewise&lowbar;linear&lowbar;distribution`] 
| 
| link:#mp_units-piecewise_linear_distribution-050[`piecewise&lowbar;linear&lowbar;distribution`] 
| 
| link:#mp_units-point_[`point&lowbar;`] 
| 
| link:#mp_units-poisson_distribution-098[`poisson&lowbar;distribution`] 
| 
| link:#mp_units-poisson_distribution-09c[`poisson&lowbar;distribution`] 
| 
| link:#mp_units-power[`power`] 
| Type container for exponents with ratio different than `1`
| link:#mp_units-prefixed_unit[`prefixed&lowbar;unit`] 
| A prefixed unit
| link:#mp_units-quantity-01[`quantity`] 
| A quantity
| link:#mp_units-quantity_like_traits[`quantity&lowbar;like&lowbar;traits`] 
| Provides support for external quantity&hyphen;like types
| link:#mp_units-quantity_point-08[`quantity&lowbar;point`] 
| A quantity point
| link:#mp_units-quantity_point_like_traits[`quantity&lowbar;point&lowbar;like&lowbar;traits`] 
| Provides support for external quantity point&hyphen;like types
| link:#mp_units-quantity_spec-09[`quantity&lowbar;spec`] 
| 
| link:#mp_units-quantity_spec-0a6[`quantity&lowbar;spec&lt;QS, Args&period;&period;&period;&gt;`] 
| 
| link:#mp_units-quantity_spec-0a0[`quantity&lowbar;spec&lt;QS, Eq, Args&period;&period;&period;&gt;`] 
| 
| link:#mp_units-reference[`reference`] 
| Quantity reference type
| link:#mp_units-relative_point_origin[`relative&lowbar;point&lowbar;origin`] 
| 
| link:#mp_units-representation_values[`representation&lowbar;values`] 
| A type trait that defines zero, one, min, and max for a representation type
| link:#mp_units-scaled_unit[`scaled&lowbar;unit`] 
| Unit being a scaled version of another unit
| link:#mp_units-student_t_distribution-0b[`student&lowbar;t&lowbar;distribution`] 
| 
| link:#mp_units-student_t_distribution-0c[`student&lowbar;t&lowbar;distribution`] 
| 
| link:#mp_units-symbol_text-032[`symbol&lowbar;text`] 
| A symbol text representation
| link:#mp_units-system_reference[`system&lowbar;reference`] 
| System&hyphen;specific reference
| link:#mp_units-uniform_int_distribution-08[`uniform&lowbar;int&lowbar;distribution`] 
| 
| link:#mp_units-uniform_int_distribution-0e[`uniform&lowbar;int&lowbar;distribution`] 
| 
| link:#mp_units-uniform_real_distribution-0c[`uniform&lowbar;real&lowbar;distribution`] 
| 
| link:#mp_units-uniform_real_distribution-05[`uniform&lowbar;real&lowbar;distribution`] 
| 
| link:#mp_units-unit_symbol_formatting[`unit&lowbar;symbol&lowbar;formatting`] 
| 
| link:#mp_units-weibull_distribution-0d[`weibull&lowbar;distribution`] 
| 
| link:#mp_units-weibull_distribution-04[`weibull&lowbar;distribution`] 
| 
| link:#mp_units-zeroth_point_origin_[`zeroth&lowbar;point&lowbar;origin&lowbar;`] 
| 
| link:#mp_units-conditional[`conditional`] 
| 
| link:#mp_units-expr_type[`expr&lowbar;type`] 
| 
| link:#mp_units-fixed_string[`fixed&lowbar;string`] 
| 
| link:#mp_units-fixed_u16string[`fixed&lowbar;u16string`] 
| 
| link:#mp_units-fixed_u32string[`fixed&lowbar;u32string`] 
| 
| link:#mp_units-fixed_u8string[`fixed&lowbar;u8string`] 
| 
| link:#mp_units-fixed_wstring[`fixed&lowbar;wstring`] 
| 
| link:#mp_units-is_same[`is&lowbar;same`] 
| 
| link:#mp_units-quantity_values[`quantity&lowbar;values`] 
| 
| link:#mp_units-text_encoding[`text&lowbar;encoding`] 
| 
| link:#mp_units-value_type_t[`value&lowbar;type&lowbar;t`] 
| 
| link:#mp_units-wrapped_type_t[`wrapped&lowbar;type&lowbar;t`] 
| 
|===

== Enums

[cols=2]
|===
| Name
| Description
| link:#mp_units-character_set[`character&lowbar;set`] 
| 
| link:#mp_units-quantity_character[`quantity&lowbar;character`] 
| Quantity character
| link:#mp_units-unit_symbol_separator[`unit&lowbar;symbol&lowbar;separator`] 
| 
| link:#mp_units-unit_symbol_solidus[`unit&lowbar;symbol&lowbar;solidus`] 
| 
|===

== Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-abs[`abs`] 
| Computes the absolute value of a quantity
| link:#mp_units-castable[`castable`] 
| 
| link:#mp_units-cbrt-07[`cbrt`] 
| `cbrt` overloads
| link:#mp_units-ceil[`ceil`] 
| Computes the smallest quantity with integer representation and unit type To with its number not less than q
| link:#mp_units-contains-01b[`contains`] 
| 
| link:#mp_units-cubic[`cubic`] 
| Computes the cubic power of a unit
| link:#mp_units-default_point_origin[`default&lowbar;point&lowbar;origin`] 
| 
| link:#mp_units-dimension_symbol[`dimension&lowbar;symbol`] 
| 
| link:#mp_units-dimension_symbol_to[`dimension&lowbar;symbol&lowbar;to`] 
| 
| link:#mp_units-epsilon[`epsilon`] 
| Returns the epsilon of the quantity
| link:#mp_units-exp[`exp`] 
| Computes Euler&apos;s raised to the given power
| link:#mp_units-explicitly_convertible[`explicitly&lowbar;convertible`] 
| 
| link:#mp_units-floor[`floor`] 
| Computes the largest quantity with integer representation and unit type To with its number not greater than q
| link:#mp_units-fma-0c[`fma`] 
| `fma` overloads
| link:#mp_units-fmod[`fmod`] 
| Computes the floating&hyphen;point remainder of the division operation x &sol; y&period;
| link:#mp_units-get-0a[`get`] 
| 
| link:#mp_units-get_canonical_unit[`get&lowbar;canonical&lowbar;unit`] 
| 
| link:#mp_units-get_common_quantity_spec-08[`get&lowbar;common&lowbar;quantity&lowbar;spec`] 
| 
| link:#mp_units-get_common_reference[`get&lowbar;common&lowbar;reference`] 
| 
| link:#mp_units-get_common_unit-08f[`get&lowbar;common&lowbar;unit`] 
| 
| link:#mp_units-get_kind[`get&lowbar;kind`] 
| 
| link:#mp_units-get_quantity_spec-021[`get&lowbar;quantity&lowbar;spec`] 
| 
| link:#mp_units-get_unit-02[`get&lowbar;unit`] 
| 
| link:#mp_units-hypot-00[`hypot`] 
| `hypot` overloads
| link:#mp_units-implicitly_convertible[`implicitly&lowbar;convertible`] 
| 
| link:#mp_units-interconvertible[`interconvertible`] 
| 
| link:#mp_units-inverse-0e[`inverse`] 
| Computes the inverse of a quantity in a provided unit
| link:#mp_units-is_eq_zero[`is&lowbar;eq&lowbar;zero`] 
| 
| link:#mp_units-is_gt_zero[`is&lowbar;gt&lowbar;zero`] 
| 
| link:#mp_units-is_gteq_zero[`is&lowbar;gteq&lowbar;zero`] 
| 
| link:#mp_units-is_lt_zero[`is&lowbar;lt&lowbar;zero`] 
| 
| link:#mp_units-is_lteq_zero[`is&lowbar;lteq&lowbar;zero`] 
| 
| link:#mp_units-is_neq_zero[`is&lowbar;neq&lowbar;zero`] 
| 
| link:#mp_units-isfinite-01[`isfinite`] 
| `isfinite` overloads
| link:#mp_units-isinf-0c[`isinf`] 
| `isinf` overloads
| link:#mp_units-isnan-08c[`isnan`] 
| `isnan` overloads
| link:#mp_units-lerp[`lerp`] 
| Linear interpolation or extrapolation
| link:#mp_units-magnitude-0c[`magnitude`] 
| 
| link:#mp_units-midpoint[`midpoint`] 
| Computes the midpoint of two points
| link:#mp_units-operator_mod-01[`operator%`] 
| Modulus operators
| link:#mp_units-operator_star-000[`operator&ast;`] 
| Multiplication operators
| link:#mp_units-operator_plus-0ad[`operator&plus;`] 
| Addition operators
| link:#mp_units-operator_minus-0c[`operator&hyphen;`] 
| Subtraction operators
| link:#mp_units-operator_slash-0a8[`operator&sol;`] 
| Division operators
| link:#mp_units-pow-00[`pow`] 
| `pow` overloads
| link:#mp_units-quantity_cast-0f[`quantity&lowbar;cast`] 
| `quantity&lowbar;cast` overloads
| link:#mp_units-remainder[`remainder`] 
| Computes the IEEE remainder of the floating point division operation x &sol; y&period;
| link:#mp_units-round[`round`] 
| Computes the nearest quantity with integer representation and unit type `To` to `q`
| link:#mp_units-sqrt-0c[`sqrt`] 
| `sqrt` overloads
| link:#mp_units-square[`square`] 
| Computes the square power of a unit
| link:#mp_units-swap[`swap`] 
| 
| link:#mp_units-unit_symbol[`unit&lowbar;symbol`] 
| 
| link:#mp_units-unit_symbol_to[`unit&lowbar;symbol&lowbar;to`] 
| 
| link:#mp_units-unit_vector[`unit&lowbar;vector`] 
| 
| link:#mp_units-value_cast-03[`value&lowbar;cast`] 
| `value&lowbar;cast` overloads
| link:#mp_units-operator_lshift-0e9[`operator&lt;&lt;`] 
| Stream insertion operators
| link:#mp_units-operator_eq-0c[`operator&equals;&equals;`] 
| Equality operators
| link:#mp_units-operator_3way-06[`operator&lt;&equals;&gt;`] 
| Three&hyphen;way comparison operators
|===

== Variables

[cols=2]
|===
| Name
| Description
| link:#mp_units-absolute[`absolute`] 
| 
| link:#mp_units-delta[`delta`] 
| 
| link:#mp_units-dimension_one-060[`dimension&lowbar;one`] 
| 
| link:#mp_units-dimensionless-03[`dimensionless`] 
| Quantity of dimension one
| link:#mp_units-disable_real-00[`disable&lowbar;real`] 
| &sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol; REAL SCALAR &sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;
| link:#mp_units-disable_real-0b[`disable&lowbar;real&lt;bool&gt;`] 
| 
| link:#mp_units-imag[`imag`] 
| 
| link:#mp_units-is_complex[`is&lowbar;complex`] 
| 
| link:#mp_units-is_derived_from_specialization_of[`is&lowbar;derived&lowbar;from&lowbar;specialization&lowbar;of`] 
| 
| link:#mp_units-is_derived_from_specialization_of_v[`is&lowbar;derived&lowbar;from&lowbar;specialization&lowbar;of&lowbar;v`] 
| 
| link:#mp_units-is_kind-0b[`is&lowbar;kind`] 
| 
| link:#mp_units-is_same_v-0d[`is&lowbar;same&lowbar;v`] 
| 
| link:#mp_units-is_same_v-0e[`is&lowbar;same&lowbar;v&lt;T, T&gt;`] 
| 
| link:#mp_units-is_scalar[`is&lowbar;scalar`] 
| 
| link:#mp_units-is_specialization_of-06[`is&lowbar;specialization&lowbar;of`] 
| 
| link:#mp_units-is_specialization_of-0b[`is&lowbar;specialization&lowbar;of&lt;Type&lt;Params&period;&period;&period;&gt;, Type&gt;`] 
| 
| link:#mp_units-is_specialization_of_v-01[`is&lowbar;specialization&lowbar;of&lowbar;v`] 
| 
| link:#mp_units-is_specialization_of_v-08[`is&lowbar;specialization&lowbar;of&lowbar;v&lt;Type&lt;Params&period;&period;&period;&gt;, Type&gt;`] 
| 
| link:#mp_units-is_tensor[`is&lowbar;tensor`] 
| 
| link:#mp_units-is_value_preserving[`is&lowbar;value&lowbar;preserving`] 
| Specifies if a specific conversion between two types preserves the value
| link:#mp_units-is_vector[`is&lowbar;vector`] 
| 
| link:#mp_units-kind_of[`kind&lowbar;of`] 
| 
| link:#mp_units-known_first_factor[`known&lowbar;first&lowbar;factor`] 
| &sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;
| link:#mp_units-mag[`mag`] 
| 
| link:#mp_units-mag_pi[`mag&lowbar;pi`] 
| 
| link:#mp_units-mag_power[`mag&lowbar;power`] 
| Create a Magnitude which is some rational number raised to a rational power&period;
| link:#mp_units-mag_ratio[`mag&lowbar;ratio`] 
| 
| link:#mp_units-magnitude-04[`magnitude`] 
| 
| link:#mp_units-modulus[`modulus`] 
| 
| link:#mp_units-one-07[`one`] 
| 
| link:#mp_units-parts_per_million-0a[`parts&lowbar;per&lowbar;million`] 
| 
| link:#mp_units-per_mille-08[`per&lowbar;mille`] 
| 
| link:#mp_units-percent-0a[`percent`] 
| 
| link:#mp_units-pi-0f[`pi`] 
| 
| link:#mp_units-point[`point`] 
| 
| link:#mp_units-ppm[`ppm`] 
| 
| link:#mp_units-real[`real`] 
| 
| link:#mp_units-space_before_unit_symbol[`space&lowbar;before&lowbar;unit&lowbar;symbol`] 
| Puts a space &apos; &apos; sign before a unit symbol
| link:#mp_units-treat_as_floating_point[`treat&lowbar;as&lowbar;floating&lowbar;point`] 
| Specifies if a value of a type should be treated as a floating&hyphen;point value
| link:#mp_units-zeroth_point_origin[`zeroth&lowbar;point&lowbar;origin`] 
| 
| link:#mp_units-π[`π`] 
| 
|===

== Concepts

[cols=2]
|===
| Name
| Description
| link:#mp_units-AssociatedUnit[`AssociatedUnit`] 
| A concept matching all units that can be used as quantity references
| link:#mp_units-Dimension[`Dimension`] 
| A concept matching all dimensions in the library&period;
| link:#mp_units-DimensionOf[`DimensionOf`] 
| A concept checking if the argument is of the same dimension&period;
| link:#mp_units-PointOrigin[`PointOrigin`] 
| A concept matching all quantity point origins in the library
| link:#mp_units-PointOriginFor[`PointOriginFor`] 
| A concept matching all quantity point origins for a specified quantity type in the library
| link:#mp_units-PrefixableUnit[`PrefixableUnit`] 
| A concept to be used to define prefixes for a unit
| link:#mp_units-Quantity[`Quantity`] 
| A concept matching all quantities in the library
| link:#mp_units-QuantityLike[`QuantityLike`] 
| A concept matching all external quantities like types
| link:#mp_units-QuantityOf[`QuantityOf`] 
| A concept matching all quantities of the provided quantity spec
| link:#mp_units-QuantityPoint[`QuantityPoint`] 
| A concept matching all quantity points in the library
| link:#mp_units-QuantityPointLike[`QuantityPointLike`] 
| A concept matching all external quantity point like types
| link:#mp_units-QuantityPointOf[`QuantityPointOf`] 
| A concept matching all quantity points of the provided property
| link:#mp_units-QuantitySpec[`QuantitySpec`] 
| 
| link:#mp_units-QuantitySpecOf[`QuantitySpecOf`] 
| A concept matching all quantity specifications of a provided quantity spec value
| link:#mp_units-Reference[`Reference`] 
| A concept matching all references in the library&period;
| link:#mp_units-ReferenceOf[`ReferenceOf`] 
| A concept matching all references of the provided quantity spec
| link:#mp_units-RepresentationOf[`RepresentationOf`] 
| 
| link:#mp_units-Unit[`Unit`] 
| A concept matching all unit types in the library
| link:#mp_units-UnitMagnitude[`UnitMagnitude`] 
| Concept to detect whether T is a valid UnitMagnitude&period;
| link:#mp_units-UnitOf[`UnitOf`] 
| A concept matching all units associated with the provided quantity spec
|===

== Deduction Guides

[cols=1]
|===
| Name
| link:#mp_units-basic_fixed_string-0d[`basic&lowbar;fixed&lowbar;string&lt;CharT, N &hyphen; 1&gt;`] 
| link:#mp_units-basic_fixed_string-0f[`basic&lowbar;fixed&lowbar;string&lt;CharT, 1 &plus; sizeof&period;&period;&period;(Rest)&gt;`] 
| link:#mp_units-basic_fixed_string-0a[`basic&lowbar;fixed&lowbar;string&lt;CharT, N&gt;`] 
| link:#mp_units-cartesian_vector-05[`cartesian&lowbar;vector&lt;std::common&lowbar;type&lowbar;t&lt;Arg, Args&period;&period;&period;&gt;&gt;`] 
| link:#mp_units-quantity-05[`quantity&lt;quantity&lowbar;like&lowbar;traits&lt;Q&gt;&colon;&colon;reference, quantity&lowbar;like&lowbar;traits&lt;Q&gt;::rep&gt;`] 
| link:#mp_units-quantity-02[`quantity&lt;R&lcub;&rcub;, Value&gt;`] 
| link:#mp_units-quantity_point-04[`quantity&lowbar;point&lt;Q&colon;&colon;reference, default&lowbar;point&lowbar;origin(Q&colon;&colon;reference), Q::rep&gt;`] 
| link:#mp_units-quantity_point-0cb[`quantity&lowbar;point&lt;quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;reference, quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;point&lowbar;origin, quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;::rep&gt;`] 
| link:#mp_units-quantity_point-0c5[`quantity&lowbar;point&lt;Q&colon;&colon;reference, PO&lcub;&rcub;, Q::rep&gt;`] 
| link:#mp_units-symbol_text-06[`symbol&lowbar;text&lt;1, 1&gt;`] 
| link:#mp_units-symbol_text-07[`symbol&lowbar;text&lt;N, N&gt;`] 
| link:#mp_units-symbol_text-03f[`symbol&lowbar;text&lt;N &hyphen; 1, N &hyphen; 1&gt;`] 
| link:#mp_units-symbol_text-0f[`symbol&lowbar;text&lt;N, M&gt;`] 
| link:#mp_units-symbol_text-01[`symbol&lowbar;text&lt;N &hyphen; 1, M &hyphen; 1&gt;`] 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    bool B,
    typename T,
    typename F&gt;
using conditional = &sol;&ast; implementation-defined &ast;&sol;::type&lt;T, F&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbolic&lowbar;expression&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
using expr&lowbar;type = &sol;&ast; implementation-defined &ast;&sol;::type;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N&gt;
using fixed&lowbar;string = link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;char, N&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N&gt;
using fixed&lowbar;u16string = link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;char16&lowbar;t, N&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N&gt;
using fixed&lowbar;u32string = link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;char32&lowbar;t, N&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N&gt;
using fixed&lowbar;u8string = link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;char8&lowbar;t, N&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N&gt;
using fixed&lowbar;wstring = link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;wchar&lowbar;t, N&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class U&gt;
using is&lowbar;same = std::bool&lowbar;constant&lt;is&lowbar;same&lowbar;v&lt;T, U&gt;&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;customization&lowbar;points&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Rep&gt;
using quantity&lowbar;values = link:#mp_units-representation_values[representation&lowbar;values&lt;Rep&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using text&lowbar;encoding = link:#mp_units-character_set[character&lowbar;set];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
requires std&colon;&colon;is&lowbar;object&lowbar;v&lt;T&gt;
using value&lowbar;type&lowbar;t = &sol;&ast; implementation-defined &ast;&sol;::type;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
requires (!std&colon;&colon;is&lowbar;pointer&lowbar;v&lt;T&gt; &amp;&amp; !std&colon;&colon;is&lowbar;array&lowbar;v&lt;T&gt;) &amp;&amp;
            requires &lcub; typename std&colon;&colon;indirectly&lowbar;readable&lowbar;traits&lt;T&gt;&colon;&colon;value&lowbar;type&semi; &rcub;
using wrapped&lowbar;type&lowbar;t = std::indirectly&lowbar;readable&lowbar;traits&lt;T&gt;::value&lowbar;type;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-QuantitySpec[QuantitySpec] auto QS&gt;
struct absolute&lowbar;point&lowbar;origin
    : &sol;&ast; implementation-defined &ast;&sol;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `&sol;&ast; implementation-defined &ast;&sol;`
| 
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mp_units-absolute_point_origin-_quantity_spec_[`&lowbar;quantity&lowbar;spec&lowbar;`] 
|===

== Derived Classes

[cols=2]
|===
| Name
| Description
| link:#mp_units-zeroth_point_origin_[`zeroth&lowbar;point&lowbar;origin&lowbar;`]
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-QuantitySpec[QuantitySpec] auto &lowbar;quantity&lowbar;spec&lowbar; = QS;
----

A dimension of a base quantity

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-symbol_text-032[symbol&lowbar;text] Symbol&gt;
struct base&lowbar;dimension
    : &sol;&ast; implementation-defined &ast;&sol;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `&sol;&ast; implementation-defined &ast;&sol;`
| 
|===

== Static Data Members

[cols=2]
|===
| Name
| Description
| link:#mp_units-base_dimension-_symbol_[`&lowbar;symbol&lowbar;`] 
| Unique base dimension identifier
|===

== Description

Base quantity is a quantity in a conventionally chosen subset of a given system of quantities, where no quantity in the subset can be expressed in terms of the other quantities within that subset&period; They are referred to as being mutually independent since a base quantity cannot be expressed as a product of powers of the other base quantities&period;

`Symbol` template parameter is an unique identifier of the base dimension&period; The same identifiers can be multiplied and divided which will result with an adjustment of its factor in an exponent of a `derived&lowbar;dimension` (in case of zero the dimension will be simplified and removed from further analysis of current expresion)&period;

User should derive a strong type from this class template rather than use it directly in the source code&period; For example&colon;

[,cpp]
----
{.cpp}
 inline constexpr struct dim_length final : base_dimension<"L"> {} dim_length;
 inline constexpr struct dim_time final : base_dimension<"T"> {} dim_time;
 inline constexpr struct dim_mass final : base_dimension<"M"> {} dim_mass;
----
[NOTE]
====
A common convention in this library is to assign the same name for a type and an object of this type&period; Besides defining them user never works with the dimension types in the source code&period; All operations are done on the objects&period; Contrarily, the dimension types are the only one visible in the compilation errors&period; Having them of the same names improves user experience and somehow blurs those separate domains&period;

====

== Template Parameters

[cols=2]
|===
| Name
| Description
| *Symbol*
| an unique identifier of the base dimension used to provide dimensional analysis support
|===

Unique base dimension identifier

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;symbol&lowbar; = Symbol;
----

A compile&hyphen;time fixed string

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename CharT,
    std::size&lowbar;t N&gt;
class basic&lowbar;fixed&lowbar;string;
----

== Types

[cols=1]
|===
| Name
| link:#mp_units-basic_fixed_string-08-const_iterator[`const&lowbar;iterator`] 
| link:#mp_units-basic_fixed_string-08-const_pointer[`const&lowbar;pointer`] 
| link:#mp_units-basic_fixed_string-08-const_reference[`const&lowbar;reference`] 
| link:#mp_units-basic_fixed_string-08-const_reverse_iterator[`const&lowbar;reverse&lowbar;iterator`] 
| link:#mp_units-basic_fixed_string-08-difference_type[`difference&lowbar;type`] 
| link:#mp_units-basic_fixed_string-08-iterator[`iterator`] 
| link:#mp_units-basic_fixed_string-08-pointer[`pointer`] 
| link:#mp_units-basic_fixed_string-08-reference[`reference`] 
| link:#mp_units-basic_fixed_string-08-reverse_iterator[`reverse&lowbar;iterator`] 
| link:#mp_units-basic_fixed_string-08-size_type[`size&lowbar;type`] 
| link:#mp_units-basic_fixed_string-08-value_type[`value&lowbar;type`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-basic_fixed_string-08-2constructor-01[`basic&lowbar;fixed&lowbar;string`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-basic_fixed_string-08-operator_assign[`operator&equals;`] 
| Copy assignment operator
| link:#mp_units-basic_fixed_string-08-at[`at`] 
| 
| link:#mp_units-basic_fixed_string-08-back[`back`] 
| 
| link:#mp_units-basic_fixed_string-08-begin[`begin`] 
| 
| link:#mp_units-basic_fixed_string-08-c_str[`c&lowbar;str`] 
| 
| link:#mp_units-basic_fixed_string-08-cbegin[`cbegin`] 
| 
| link:#mp_units-basic_fixed_string-08-cend[`cend`] 
| 
| link:#mp_units-basic_fixed_string-08-crbegin[`crbegin`] 
| 
| link:#mp_units-basic_fixed_string-08-crend[`crend`] 
| 
| link:#mp_units-basic_fixed_string-08-data[`data`] 
| 
| link:#mp_units-basic_fixed_string-08-end[`end`] 
| 
| link:#mp_units-basic_fixed_string-08-front[`front`] 
| 
| link:#mp_units-basic_fixed_string-08-operator_subs[`operator&lsqb;&rsqb;`] 
| 
| link:#mp_units-basic_fixed_string-08-rbegin[`rbegin`] 
| 
| link:#mp_units-basic_fixed_string-08-rend[`rend`] 
| 
| link:#mp_units-basic_fixed_string-08-swap[`swap`] 
| 
| link:#mp_units-basic_fixed_string-08-view[`view`] 
| 
| link:#mp_units-basic_fixed_string-08-2conversion[`operator std::basic&lowbar;string&lowbar;view&lt;CharT&gt;`] 
| Conversion to `basic&lowbar;string&lowbar;view`
|===

== Data Members

[cols=1]
|===
| Name
| link:#mp_units-basic_fixed_string-08-data_[`data&lowbar;`] 
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mp_units-basic_fixed_string-08-empty[`empty`] 
| link:#mp_units-basic_fixed_string-08-length[`length`] 
| link:#mp_units-basic_fixed_string-08-max_size[`max&lowbar;size`] 
| link:#mp_units-basic_fixed_string-08-size[`size`] 
|===

== Friends

[cols=2]
|===
| Name
| Description
| `link:#mp_units-operator_lshift-0e6[mp&lowbar;units::operator&lt;&lt;]`
| Stream insertion operator
| `link:#mp_units-operator_3way-05[mp&lowbar;units::operator&lt;&equals;&gt;]`
| Three&hyphen;way comparison operator
| `link:#mp_units-operator_3way-0de[mp&lowbar;units::operator&lt;&equals;&gt;]`
| Three&hyphen;way comparison operator
| `link:#mp_units-operator_eq-03d[mp&lowbar;units::operator&equals;&equals;]`
| Equality operator
| `link:#mp_units-operator_eq-032[mp&lowbar;units::operator&equals;&equals;]`
| Equality operator
| `link:#mp_units-operator_plus-067[mp&lowbar;units::operator&plus;]`
| Addition operator
| `link:#mp_units-operator_plus-0ec[mp&lowbar;units::operator&plus;]`
| Addition operator
| `link:#mp_units-operator_plus-07[mp&lowbar;units::operator&plus;]`
| Addition operator
| `link:#mp_units-operator_plus-0e3[mp&lowbar;units::operator&plus;]`
| Addition operator
| `link:#mp_units-operator_plus-0e6[mp&lowbar;units::operator&plus;]`
| Addition operator
|===

== Template Parameters

[cols=2]
|===
| Name
| Description
| *CharT*
| Character type to be used by the string
| *N*
| The size of the string
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;iterator = link:#mp_units-basic_fixed_string-08-value_type[value&lowbar;type] const*;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;pointer = link:#mp_units-basic_fixed_string-08-value_type[value&lowbar;type] const*;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;reference = link:#mp_units-basic_fixed_string-08-value_type[value&lowbar;type] const&;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using const&lowbar;reverse&lowbar;iterator = std::reverse&lowbar;iterator&lt;const&lowbar;iterator&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using difference&lowbar;type = std::ptrdiff&lowbar;t;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using iterator = link:#mp_units-basic_fixed_string-08-const_iterator[const&lowbar;iterator];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using pointer = link:#mp_units-basic_fixed_string-08-value_type[value&lowbar;type]*;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using reference = link:#mp_units-basic_fixed_string-08-value_type[value&lowbar;type]&;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using reverse&lowbar;iterator = link:#mp_units-basic_fixed_string-08-const_reverse_iterator[const&lowbar;reverse&lowbar;iterator];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using size&lowbar;type = std::size&lowbar;t;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using value&lowbar;type = CharT;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

Copy constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mp_units-basic_fixed_string-08-2constructor-08[basic&lowbar;fixed&lowbar;string](link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& other) noexcept = default;
----

[.small]#link:#mp_units-basic_fixed_string-08-2constructor-08[_» more&period;&period;&period;_]#

Construct from `CharT`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
consteval
explicit(false)
link:#mp_units-basic_fixed_string-08-2constructor-0f[basic&lowbar;fixed&lowbar;string](CharT const(& txt)[]) noexcept;
----

[.small]#link:#mp_units-basic_fixed_string-08-2constructor-0f[_» more&period;&period;&period;_]#

Construct from `Chars`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::same&lowbar;as&lt;CharT&gt;&period;&period;&period; Chars&gt;
requires (sizeof&period;&period;&period;(Chars) &equals;&equals; N) &amp;&amp; (&period;&period;&period; &amp;&amp; !std&colon;&colon;is&lowbar;pointer&lowbar;v&lt;Chars&gt;)
constexpr
explicit
link:#mp_units-basic_fixed_string-08-2constructor-02[basic&lowbar;fixed&lowbar;string](Chars&period;&period;&period; chars) noexcept;
----

[.small]#link:#mp_units-basic_fixed_string-08-2constructor-02[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::ranges::input&lowbar;range R&gt;
requires std&colon;&colon;same&lowbar;as&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;R&gt;, CharT&gt;
constexpr
link:#mp_units-basic_fixed_string-08-2constructor-03[basic&lowbar;fixed&lowbar;string](
    std::from&lowbar;range&lowbar;t,
    R&& r);
----

[.small]#link:#mp_units-basic_fixed_string-08-2constructor-03[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::input&lowbar;iterator It,
    std::sentinel&lowbar;for&lt;It&gt; S&gt;
requires std&colon;&colon;same&lowbar;as&lt;std&colon;&colon;iter&lowbar;value&lowbar;t&lt;It&gt;, CharT&gt;
constexpr
link:#mp_units-basic_fixed_string-08-2constructor-05[basic&lowbar;fixed&lowbar;string](
    It begin,
    S end);
----

[.small]#link:#mp_units-basic_fixed_string-08-2constructor-05[_» more&period;&period;&period;_]#

Copy constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
basic&lowbar;fixed&lowbar;string(link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& other) noexcept = default;
----

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to copy construct from
|===

Construct from `CharT`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
consteval
explicit(false)
basic&lowbar;fixed&lowbar;string(CharT const(& txt)[]) noexcept;
----

== Parameters

[cols=2]
|===
| Name
| Description
| *txt*
| The object to copy construct from
|===

Construct from `Chars`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::same&lowbar;as&lt;CharT&gt;&period;&period;&period; Chars&gt;
requires (sizeof&period;&period;&period;(Chars) &equals;&equals; N) &amp;&amp; (&period;&period;&period; &amp;&amp; !std&colon;&colon;is&lowbar;pointer&lowbar;v&lt;Chars&gt;)
constexpr
explicit
basic&lowbar;fixed&lowbar;string(Chars&period;&period;&period; chars) noexcept;
----

== Parameters

[cols=2]
|===
| Name
| Description
| *chars*
| The object to construct from
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::ranges::input&lowbar;range R&gt;
requires std&colon;&colon;same&lowbar;as&lt;std&colon;&colon;ranges&colon;&colon;range&lowbar;value&lowbar;t&lt;R&gt;, CharT&gt;
constexpr
basic&lowbar;fixed&lowbar;string(
    std::from&lowbar;range&lowbar;t,
    R&& r);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::input&lowbar;iterator It,
    std::sentinel&lowbar;for&lt;It&gt; S&gt;
requires std&colon;&colon;same&lowbar;as&lt;std&colon;&colon;iter&lowbar;value&lowbar;t&lt;It&gt;, CharT&gt;
constexpr
basic&lowbar;fixed&lowbar;string(
    It begin,
    S end);
----

Copy assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string]&
operator&equals;(link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& other) noexcept = default;
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to copy assign from
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08-const_reference[const&lowbar;reference]
at(link:#mp_units-basic_fixed_string-08-size_type[size&lowbar;type] pos) const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08-const_reference[const&lowbar;reference]
back() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08-const_iterator[const&lowbar;iterator]
begin() const noexcept;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08-const_pointer[const&lowbar;pointer]
c&lowbar;str() const noexcept;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08-const_iterator[const&lowbar;iterator]
cbegin() const noexcept;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08-const_iterator[const&lowbar;iterator]
cend() const noexcept;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08-const_reverse_iterator[const&lowbar;reverse&lowbar;iterator]
crbegin() const noexcept;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08-const_reverse_iterator[const&lowbar;reverse&lowbar;iterator]
crend() const noexcept;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08-const_pointer[const&lowbar;pointer]
data() const noexcept;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08-const_iterator[const&lowbar;iterator]
end() const noexcept;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08-const_reference[const&lowbar;reference]
front() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08-const_reference[const&lowbar;reference]
operator&lsqb;&rsqb;(link:#mp_units-basic_fixed_string-08-size_type[size&lowbar;type] pos) const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08-const_reverse_iterator[const&lowbar;reverse&lowbar;iterator]
rbegin() const noexcept;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08-const_reverse_iterator[const&lowbar;reverse&lowbar;iterator]
rend() const noexcept;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
void
swap(link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string]& s) noexcept;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
std::basic&lowbar;string&lowbar;view&lt;CharT&gt;
view() const noexcept;
----

Conversion to `basic&lowbar;string&lowbar;view`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
explicit(false)
operator std::basic&lowbar;string&lowbar;view&lt;CharT&gt;() const noexcept;
----

== Return Value

The object converted to `basic&lowbar;string&lowbar;view`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
CharT data&lowbar;[] = &lcub;&rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
std::bool&lowbar;constant&lt;N &equals;&equals; 0&gt; empty = &lcub;&rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
std::integral&lowbar;constant&lt;size&lowbar;type, N&gt; length = &lcub;&rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
std::integral&lowbar;constant&lt;size&lowbar;type, N&gt; max&lowbar;size = &lcub;&rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
std::integral&lowbar;constant&lt;size&lowbar;type, N&gt; size = &lcub;&rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct binomial&lowbar;distribution
    : std::binomial&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::binomial&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-binomial_distribution-0e-base[`base`] 
| link:#mp_units-binomial_distribution-0e-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-binomial_distribution-0e-2constructor-08[`binomial&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-binomial_distribution-0e-max[`max`] 
| 
| link:#mp_units-binomial_distribution-0e-min[`min`] 
| 
| link:#mp_units-binomial_distribution-0e-operator_call[`operator()`] 
| 
| link:#mp_units-binomial_distribution-0e-t[`t`] 
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using base = std::binomial&lowbar;distribution&lt;rep&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Q::rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-binomial_distribution-0e-2constructor-0b[binomial&lowbar;distribution]();
----

[.small]#link:#mp_units-binomial_distribution-0e-2constructor-0b[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-binomial_distribution-0e-2constructor-0c[binomial&lowbar;distribution](
    Q const& t,
    double p);
----

[.small]#link:#mp_units-binomial_distribution-0e-2constructor-0c[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
binomial&lowbar;distribution();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
binomial&lowbar;distribution(
    Q const& t,
    double p);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
t() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;integral&lt;typename Q&colon;&colon;rep&gt;
struct binomial&lowbar;distribution
    : std::binomial&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::binomial&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; T = double&gt;
class cartesian&lowbar;vector
    : public &sol;&ast; implementation-defined &ast;&sol;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `&sol;&ast; implementation-defined &ast;&sol;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-cartesian_vector-08-value_type[`value&lowbar;type`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-cartesian_vector-08-2constructor-0b[`cartesian&lowbar;vector`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-cartesian_vector-08-operator_assign-0b6[`operator&equals;`] 
| Assignment operators
| link:#mp_units-cartesian_vector-08-magnitude[`magnitude`] 
| 
| link:#mp_units-cartesian_vector-08-operator_star_eq[`operator&ast;&equals;`] 
| Multiplication assignment operator
| link:#mp_units-cartesian_vector-08-operator_plus[`operator&plus;`] 
| Unary plus operator
| link:#mp_units-cartesian_vector-08-operator_plus_eq[`operator&plus;&equals;`] 
| Addition assignment operator
| link:#mp_units-cartesian_vector-08-operator_minus[`operator&hyphen;`] 
| Unary minus operator
| link:#mp_units-cartesian_vector-08-operator_minus_eq[`operator&hyphen;&equals;`] 
| Subtraction assignment operator
| link:#mp_units-cartesian_vector-08-operator_slash_eq[`operator&sol;&equals;`] 
| Division assignment operator
| link:#mp_units-cartesian_vector-08-operator_subs-0c[`operator&lsqb;&rsqb;`] 
| Subscript operators
| link:#mp_units-cartesian_vector-08-unit[`unit`] 
| 
|===

== Data Members

[cols=1]
|===
| Name
| link:#mp_units-cartesian_vector-08-_coordinates_[`&lowbar;coordinates&lowbar;`] 
|===

== Friends

[cols=2]
|===
| Name
| Description
| `link:#mp_units-operator_lshift-0b[mp&lowbar;units::operator&lt;&lt;]`
| Stream insertion operator
| `link:#mp_units-unit_vector[mp&lowbar;units::unit&lowbar;vector]`
| 
| `link:#mp_units-magnitude-0c[mp&lowbar;units::magnitude]`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using value&lowbar;type = T;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

Copy constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-cartesian_vector-08-2constructor-010[cartesian&lowbar;vector](link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector] const& other) = default;
----

[.small]#link:#mp_units-cartesian_vector-08-2constructor-010[_» more&period;&period;&period;_]#

Copy constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;T, U&gt;
constexpr
explicit(!std&colon;&colon;convertible&lowbar;to&lt;U, T&gt;)
link:#mp_units-cartesian_vector-08-2constructor-01a[cartesian&lowbar;vector](link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector&lt;U&gt;] const& other);
----

[.small]#link:#mp_units-cartesian_vector-08-2constructor-01a[_» more&period;&period;&period;_]#

Move constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-cartesian_vector-08-2constructor-0e[cartesian&lowbar;vector](link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]&& other) = default;
----

[.small]#link:#mp_units-cartesian_vector-08-2constructor-0e[_» more&period;&period;&period;_]#

Move constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;T, U&gt;
constexpr
explicit(!std&colon;&colon;convertible&lowbar;to&lt;U, T&gt;)
link:#mp_units-cartesian_vector-08-2constructor-0c[cartesian&lowbar;vector](link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector&lt;U&gt;]&& other);
----

[.small]#link:#mp_units-cartesian_vector-08-2constructor-0c[_» more&period;&period;&period;_]#

Construct from `Args`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename&period;&period;&period; Args&gt;
requires (&period;&period;&period; &amp;&amp; std&colon;&colon;constructible&lowbar;from&lt;T, Args&gt;)
constexpr
explicit(!(&period;&period;&period; &amp;&amp; std&colon;&colon;convertible&lowbar;to&lt;Args, T&gt;))
link:#mp_units-cartesian_vector-08-2constructor-04[cartesian&lowbar;vector](Args&period;&period;&period;&&&period;&period;&period; args);
----

[.small]#link:#mp_units-cartesian_vector-08-2constructor-04[_» more&period;&period;&period;_]#

Copy constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
cartesian&lowbar;vector(link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector] const& other) = default;
----

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to copy construct from
|===

Copy constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;T, U&gt;
constexpr
explicit(!std&colon;&colon;convertible&lowbar;to&lt;U, T&gt;)
cartesian&lowbar;vector(link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector&lt;U&gt;] const& other);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to copy construct from
|===

Move constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
cartesian&lowbar;vector(link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]&& other) = default;
----

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to move construct from
|===

Move constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;T, U&gt;
constexpr
explicit(!std&colon;&colon;convertible&lowbar;to&lt;U, T&gt;)
cartesian&lowbar;vector(link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector&lt;U&gt;]&& other);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to move construct from
|===

Construct from `Args`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename&period;&period;&period; Args&gt;
requires (&period;&period;&period; &amp;&amp; std&colon;&colon;constructible&lowbar;from&lt;T, Args&gt;)
constexpr
explicit(!(&period;&period;&period; &amp;&amp; std&colon;&colon;convertible&lowbar;to&lt;Args, T&gt;))
cartesian&lowbar;vector(Args&period;&period;&period;&&&period;&period;&period; args);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *args*
| The object to move construct from
|===

Assignment operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

Copy assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]&
link:#mp_units-cartesian_vector-08-operator_assign-05[operator&equals;](link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector] const& other) = default;
----

[.small]#link:#mp_units-cartesian_vector-08-operator_assign-05[_» more&period;&period;&period;_]#

Copy assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::convertible&lowbar;to&lt;T&gt; U&gt;
constexpr
link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]&
link:#mp_units-cartesian_vector-08-operator_assign-07[operator&equals;](link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector&lt;U&gt;] const& other);
----

[.small]#link:#mp_units-cartesian_vector-08-operator_assign-07[_» more&period;&period;&period;_]#

Move assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]&
link:#mp_units-cartesian_vector-08-operator_assign-0b3[operator&equals;](link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]&& other) = default;
----

[.small]#link:#mp_units-cartesian_vector-08-operator_assign-0b3[_» more&period;&period;&period;_]#

Move assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::convertible&lowbar;to&lt;T&gt; U&gt;
constexpr
link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]&
link:#mp_units-cartesian_vector-08-operator_assign-0d[operator&equals;](link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector&lt;U&gt;]&& other);
----

[.small]#link:#mp_units-cartesian_vector-08-operator_assign-0d[_» more&period;&period;&period;_]#

Copy assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]&
operator&equals;(link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector] const& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to copy assign from
|===

Copy assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::convertible&lowbar;to&lt;T&gt; U&gt;
constexpr
link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]&
operator&equals;(link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector&lt;U&gt;] const& other);
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to copy assign from
|===

Move assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]&
operator&equals;(link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]&& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to move assign from
|===

Move assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::convertible&lowbar;to&lt;T&gt; U&gt;
constexpr
link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]&
operator&equals;(link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector&lt;U&gt;]&& other);
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to move assign from
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T
magnitude() const
requires treat&lowbar;as&lowbar;floating&lowbar;point&lt;T&gt;;
----

Multiplication assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires requires(T t, U u) &lcub;
      &lcub; t &ast;&equals; u &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;T&amp;&gt;&semi;
    &rcub;
constexpr
link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]&
operator&ast;&equals;(U const& value);
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *value*
| The right operand
|===

Unary plus operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]
operator&plus;() const;
----

== Return Value

Another instance of the object

Addition assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires requires(T t, U u) &lcub;
      &lcub; t &plus;&equals; u &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;T&amp;&gt;&semi;
    &rcub;
constexpr
link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]&
operator&plus;&equals;(link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector&lt;U&gt;] const& other);
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The right operand
|===

Unary minus operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]
operator&hyphen;() const;
----

== Return Value

Another instance of the object

Subtraction assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires requires(T t, U u) &lcub;
      &lcub; t &hyphen;&equals; u &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;T&amp;&gt;&semi;
    &rcub;
constexpr
link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]&
operator&hyphen;&equals;(link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector&lt;U&gt;] const& other);
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The right operand
|===

Division assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
requires requires(T t, U u) &lcub;
      &lcub; t &sol;&equals; u &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;T&amp;&gt;&semi;
    &rcub;
constexpr
link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]&
operator&sol;&equals;(U const& value);
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *value*
| The right operand
|===

Subscript operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T&
link:#mp_units-cartesian_vector-08-operator_subs-0f[operator&lsqb;&rsqb;](std::size&lowbar;t i);
----

[.small]#link:#mp_units-cartesian_vector-08-operator_subs-0f[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T const&
link:#mp_units-cartesian_vector-08-operator_subs-01[operator&lsqb;&rsqb;](std::size&lowbar;t i) const;
----

[.small]#link:#mp_units-cartesian_vector-08-operator_subs-01[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T&
operator&lsqb;&rsqb;(std::size&lowbar;t i);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T const&
operator&lsqb;&rsqb;(std::size&lowbar;t i) const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]
unit() const
requires treat&lowbar;as&lowbar;floating&lowbar;point&lt;T&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
T &lowbar;coordinates&lowbar;[3];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct cauchy&lowbar;distribution
    : std::cauchy&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::cauchy&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-cauchy_distribution-04-base[`base`] 
| link:#mp_units-cauchy_distribution-04-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-cauchy_distribution-04-2constructor-04[`cauchy&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-cauchy_distribution-04-a[`a`] 
| 
| link:#mp_units-cauchy_distribution-04-b[`b`] 
| 
| link:#mp_units-cauchy_distribution-04-max[`max`] 
| 
| link:#mp_units-cauchy_distribution-04-min[`min`] 
| 
| link:#mp_units-cauchy_distribution-04-operator_call[`operator()`] 
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using base = std::cauchy&lowbar;distribution&lt;rep&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Q::rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-cauchy_distribution-04-2constructor-0a[cauchy&lowbar;distribution]();
----

[.small]#link:#mp_units-cauchy_distribution-04-2constructor-0a[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-cauchy_distribution-04-2constructor-00[cauchy&lowbar;distribution](
    Q const& a,
    Q const& b);
----

[.small]#link:#mp_units-cauchy_distribution-04-2constructor-00[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
cauchy&lowbar;distribution();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
cauchy&lowbar;distribution(
    Q const& a,
    Q const& b);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
a() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
b() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;floating&lowbar;point&lt;typename Q&colon;&colon;rep&gt;
struct cauchy&lowbar;distribution
    : std::cauchy&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::cauchy&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct chi&lowbar;squared&lowbar;distribution
    : std::chi&lowbar;squared&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::chi&lowbar;squared&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-chi_squared_distribution-0b-base[`base`] 
| link:#mp_units-chi_squared_distribution-0b-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-chi_squared_distribution-0b-2constructor-0b[`chi&lowbar;squared&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-chi_squared_distribution-0b-max[`max`] 
| 
| link:#mp_units-chi_squared_distribution-0b-min[`min`] 
| 
| link:#mp_units-chi_squared_distribution-0b-operator_call[`operator()`] 
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using base = std::chi&lowbar;squared&lowbar;distribution&lt;rep&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Q::rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-chi_squared_distribution-0b-2constructor-03[chi&lowbar;squared&lowbar;distribution]();
----

[.small]#link:#mp_units-chi_squared_distribution-0b-2constructor-03[_» more&period;&period;&period;_]#

Construct from `rep`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mp_units-chi_squared_distribution-0b-2constructor-06[chi&lowbar;squared&lowbar;distribution](link:#mp_units-chi_squared_distribution-0b-rep[rep] const& n);
----

[.small]#link:#mp_units-chi_squared_distribution-0b-2constructor-06[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
chi&lowbar;squared&lowbar;distribution();
----

Construct from `rep`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
chi&lowbar;squared&lowbar;distribution(link:#mp_units-chi_squared_distribution-0b-rep[rep] const& n);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *n*
| The object to copy construct from
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;floating&lowbar;point&lt;typename Q&colon;&colon;rep&gt;
struct chi&lowbar;squared&lowbar;distribution
    : std::chi&lowbar;squared&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::chi&lowbar;squared&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

Measurement unit for an accumulation of two quantities of different units

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit] U1,
    link:#mp_units-Unit[Unit] U2,
    link:#mp_units-Unit[Unit]&period;&period;&period; Rest&gt;
struct common&lowbar;unit final
    : ::&lowbar;base&lowbar;type&lowbar;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `::&lowbar;base&lowbar;type&lowbar;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-common_unit-_base_type_[`&lowbar;base&lowbar;type&lowbar;`] 
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mp_units-common_unit-_common_unit_[`&lowbar;common&lowbar;unit&lowbar;`] 
|===

== Description

While adding two quantities of different units we can often identify which of those unit should be used to prevent data truncation&period; For example, adding `1 &ast; m &plus; 1 &ast; mm` will end up in a quantity expressed in millimeters&period; However, for some cases this is not possible&period; Choosing any of the units from the arguments of the addition would result in a data truncation&period; For example, a common unit for `1 &ast; km &plus; 1 &ast; mi` is `&lsqb;8&sol;125&rsqb; m`&period; Instead of returning such a complex unit type the library will return a `common&lowbar;unit&lt;mi, km&gt;`&period; This type is convertible to both `mi` and `km` without risking data truncation, but is not equal to any of them&period;

[NOTE]
====
User should not instantiate this type! It is not exported from the C&plus;&plus; module&period; The library will instantiate this type automatically based on the unit arithmetic equation provided by the user&period;

====

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using &lowbar;base&lowbar;type&lowbar; = link:#mp_units-common_unit[common&lowbar;unit];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;common&lowbar;unit&lowbar; = detail&colon;&colon;get&lowbar;common&lowbar;scaled&lowbar;unit(U1&lcub;&rcub;, U2&lcub;&rcub;, Rest&lcub;&rcub;&period;&period;&period;);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;construction&lowbar;helpers&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Reference[Reference] R&gt;
struct delta&lowbar;;
----

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-delta_-operator_call[`operator()`] 
| Function call operator
|===

Function call operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;construction&lowbar;helpers&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdRep,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;get&lowbar;quantity&lowbar;spec(R&lcub;&rcub;)&gt;] Rep = std::remove&lowbar;cvref&lowbar;t&lt;FwdRep&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01[quantity&lt;R&lcub;&rcub;, Rep&gt;]
operator()(FwdRep&& lhs) const;
----

== Return Value

A quantity

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The right operand
|===

A dimension of a derived quantity

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol;&period;&period;&period; Expr&gt;
struct derived&lowbar;dimension final
    : &sol;&ast; implementation-defined &ast;&sol;
    , &sol;&ast; implementation-defined &ast;&sol;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `&sol;&ast; implementation-defined &ast;&sol;`
| 
| `&sol;&ast; implementation-defined &ast;&sol;`
| 
|===

== Description

Derived dimension is an expression of the dependence of a quantity on the base quantities of a system of quantities as a product of powers of factors corresponding to the base quantities, omitting any numerical factors&period;

Instead of using a raw list of exponents this library decided to use symbolic expression syntax to make types more digestable for the user&period; The positive exponents are ordered first and all negative exponents are put as a list into the `per&lt;&period;&period;&period;&gt;` class template&period; If a power of exponent is different than `1` the dimension type is enclosed in `power&lt;Dim, Num, Den&gt;` class template&period; Otherwise, it is just put directly in the list without any wrapper&period; There is also one special case&period; In case all of the exponents are negative than the `dimension&lowbar;one` being a dimension of a dimensionless quantity is put in the front to increase the readability&period;

For example&colon;

[,cpp]
----
{.cpp}
 using frequency = decltype(inverse(dim_time));
 using speed = decltype(dim_length / dim_time);
 using acceleration = decltype(dim_speed / dim_time);
 using force = decltype(dim_mass * dim_acceleration);
 using energy = decltype(dim_force * dim_length);
 using moment_of_force = decltype(dim_length * dim_force);
 using torque = decltype(dim_moment_of_force);
----
&hyphen; `frequency` will be derived from type `derived&lowbar;dimension&lt;dimension&lowbar;one, per&lt;dim&lowbar;time&gt;&gt;` &hyphen; `speed` will be derived from type `derived&lowbar;dimension&lt;dim&lowbar;length, per&lt;dim&lowbar;time&gt;&gt;` &hyphen; `acceleration` will be derived from type `derived&lowbar;dimension&lt;dim&lowbar;length, per&lt;power&lt;dim&lowbar;time, 2&gt;&gt;&gt;` &hyphen; `force` will be derived from type `derived&lowbar;dimension&lt;dim&lowbar;length, dim&lowbar;mass, per&lt;power&lt;dim&lowbar;time, 2&gt;&gt;&gt;` &hyphen; `energy` will be derived from type `derived&lowbar;dimension&lt;power&lt;dim&lowbar;length, 2&gt;, dim&lowbar;mass, per&lt;power&lt;dim&lowbar;time, 2&gt;&gt;&gt;`

[NOTE]
====
A common convention in this library is to assign the same name for a type and an object of this type&period; Besides defining them user never works with the dimension types in the source code&period; All operations are done on the objects&period; Contrarily, the dimension types are the only one visible in the compilation errors&period; Having them of the same names improves user experience and somehow blurs those separate domains&period;

====

[NOTE]
====
User should not instantiate this type! It is not exported from the C&plus;&plus; module&period; The library will instantiate this type automatically based on the dimensional arithmetic equation provided by the user&period;

====

== Template Parameters

[cols=2]
|===
| Name
| Description
| *Ds*
| a parameter pack consisting tokens allowed in the dimension specification (base dimensions, `dimension&lowbar;one`, `power&lt;Dim, Num, Den&gt;`, `per&lt;&period;&period;&period;&gt;`)
|===

A specification of a derived quantity

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol;&period;&period;&period; Expr&gt;
struct derived&lowbar;quantity&lowbar;spec final
    : &sol;&ast; implementation-defined &ast;&sol;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `&sol;&ast; implementation-defined &ast;&sol;`
| 
|===

== Description

Derived quantity is a quantity, in a system of quantities, defined in terms of other quantities of that system&period; Its dimension is an expression of the dependence of a quantity on the base quantities of a system of quantities as a product of powers of factors corresponding to the base quantities, omitting any numerical factors&period;

Instead of using a raw list of exponents this library decided to use symbolic expression syntax to make types more digestable for the user both for quantity specification and its dimension&period; The positive exponents are ordered first and all negative exponents are put as a list into the `per&lt;&period;&period;&period;&gt;` class template&period; If a power of exponent is different than `1` the quantity type is enclosed in `power&lt;Q, Num, Den&gt;` class template&period; Otherwise, it is just put directly in the list without any wrapper&period; In case all of the exponents are negative than the `dimensionless`&sol;`dimension&lowbar;one` is put in the front to increase the readability&period;

The character of those quantities is derived from ingredients or overriden with a template parameter&period;

For example&colon;

[,cpp]
----
{.cpp}
 auto frequency = inverse(period_duration);
 auto area = pow<2>(length);
 auto speed = distance / duration;
 auto velocity = displacement / duration;
 auto acceleration = velocity / duration;
----
&hyphen; the type of `frequency` is `derived&lowbar;quantity&lowbar;spec&lt;dimensionless, per&lt;period&lowbar;duration&gt;&gt;` &hyphen; the dimension type of `frequency` is `derived&lowbar;dimension&lt;dimension&lowbar;one, per&lt;dim&lowbar;time&gt;&gt;` &hyphen; the type of `area` is `derived&lowbar;quantity&lowbar;spec&lt;power&lt;length, 2&gt;&gt;` &hyphen; the dimension type of `area` is `derived&lowbar;dimension&lt;power&lt;dim&lowbar;length, 2&gt;&gt;` &hyphen; the type of `speed` is `derived&lowbar;quantity&lowbar;spec&lt;distance, per&lt;duration&gt;&gt;` &hyphen; the dimension type of `speed` is `derived&lowbar;dimension&lt;dim&lowbar;length, per&lt;dim&lowbar;time&gt;&gt;` &hyphen; the type of `velocity` is `derived&lowbar;quantity&lowbar;spec&lt;displacement, per&lt;duration&gt;&gt;` &hyphen; the dimension type of `velocity` is `derived&lowbar;dimension&lt;dim&lowbar;length, per&lt;dim&lowbar;time&gt;&gt;` &hyphen; the type of `acceleration` is `derived&lowbar;quantity&lowbar;spec&lt;velocity, per&lt;duration&gt;&gt;` &hyphen; the dimension type of `acceleration` is `derived&lowbar;dimension&lt;dim&lowbar;length, per&lt;power&lt;dim&lowbar;time, 2&gt;&gt;&gt;`

[NOTE]
====
User should not instantiate this type! It is not exported from the C&plus;&plus; module&period; The library will instantiate this type automatically based on the dimensional arithmetic equation provided by the user&period;

====

== Template Parameters

[cols=2]
|===
| Name
| Description
| *Expr*
| a parameter pack consisting tokens allowed in the quantity specification (named quantity specification, `dimensionless`, `power&lt;Q, Num, Den&gt;`, `per&lt;&period;&period;&period;&gt;`)
|===

Measurement unit for a derived quantity

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol;&period;&period;&period; Expr&gt;
struct derived&lowbar;unit final
    : &sol;&ast; implementation-defined &ast;&sol;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `&sol;&ast; implementation-defined &ast;&sol;`
| 
|===

== Description

Derived units are defined as products of powers of the base units&period;

Instead of using a raw list of exponents this library decided to use expression template syntax to make types more digestable for the user&period; The positive exponents are ordered first and all negative exponents are put as a list into the `per&lt;&period;&period;&period;&gt;` class template&period; If a power of exponent is different than `1` the unit type is enclosed in `power&lt;Dim, Num, Den&gt;` class template&period; Otherwise, it is just put directly in the list without any wrapper&period; There is also one special case&period; In case all of the exponents are negative then the `one` being a coherent unit of a dimensionless quantity is put in the front to increase the readability&period;

For example&colon;

[,cpp]
----
{.cpp}
 static_assert(is_of_type<inverse(second), derived_unit<one, per<second>>>);
 static_assert(is_of_type<one / inverse(second), second>);
 static_assert(is_of_type<one * second, second>);
 static_assert(is_of_type<metre * metre, derived_unit<power<metre, 2>>>);
 static_assert(is_of_type<metre * second, derived_unit<metre, second>>);
 static_assert(is_of_type<metre / second, derived_unit<metre, per<second>>>);
 static_assert(is_of_type<metre / square(second), derived_unit<metre, per<power<second, 2>>>>);
 static_assert(is_of_type<watt / joule, derived_unit<watt, per<joule>>>);
----
Every unit in the library has its internal canonical representation being the list of exponents of named base units (with the exception of `kilogram` which is represented as `gram` here) and a scaling ratio represented with a magnitude&period;

Two units are deemed convertible if their canonical version has units of the same type&period; Two units are equivalent when they are convertible and their canonical versions have the same scaling ratios&period;

The above means that&colon; &hyphen; `1&sol;s` and `Hz` are both convertible and equal &hyphen; `m` and `km` are convertible but not equal &hyphen; `m` and `m²` ane not convertible and not equal

[NOTE]
====
This also means that units like `hertz` and `becquerel` are also considered convertible and equal&period;

====

[NOTE]
====
User should not instantiate this type! It is not exported from the C&plus;&plus; module&period; The library will instantiate this type automatically based on the unit arithmetic equation provided by the user&period;

====

== Template Parameters

[cols=2]
|===
| Name
| Description
| *Us*
| a parameter pack consisting tokens allowed in the unit specification (units, `power&lt;U, Num, Den&gt;`, `per&lt;&period;&period;&period;&gt;`)
|===

Dimension one

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct dimension&lowbar;one final
    : &sol;&ast; implementation-defined &ast;&sol;
    , &sol;&ast; implementation-defined &ast;&sol;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `&sol;&ast; implementation-defined &ast;&sol;`
| 
| `&sol;&ast; implementation-defined &ast;&sol;`
| 
|===

== Description

Dimension for which all the exponents of the factors corresponding to the base dimensions are zero&period; It is a dimension of a quantity of dimension one also known as &quot;dimensionless&quot;&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct dimension&lowbar;symbol&lowbar;formatting;
----

== Data Members

[cols=1]
|===
| Name
| link:#mp_units-dimension_symbol_formatting-char_set[`char&lowbar;set`] 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-character_set[character&lowbar;set] char&lowbar;set = character&lowbar;set&colon;&colon;default&lowbar;character&lowbar;set;
----

Quantity of dimension one

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct dimensionless final
    : link:#mp_units-quantity_spec-09[mp&lowbar;units::quantity&lowbar;spec&lt;derived&lowbar;quantity&lowbar;spec&lt;&gt;&lcub;&rcub;&gt;]
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `link:#mp_units-quantity_spec-09[mp&lowbar;units::quantity&lowbar;spec&lt;derived&lowbar;quantity&lowbar;spec&lt;&gt;&lcub;&rcub;&gt;]`
| 
|===

== Description

Quantity of dimension one also commonly named as &quot;dimensionless&quot; is a quantity with a dimension for which all the exponents of the factors corresponding to the base dimensions are zero&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct discrete&lowbar;distribution
    : std::discrete&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::discrete&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-discrete_distribution-08-base[`base`] 
| link:#mp_units-discrete_distribution-08-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-discrete_distribution-08-2constructor-08[`discrete&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-discrete_distribution-08-max[`max`] 
| 
| link:#mp_units-discrete_distribution-08-min[`min`] 
| 
| link:#mp_units-discrete_distribution-08-operator_call[`operator()`] 
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using base = std::discrete&lowbar;distribution&lt;rep&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Q::rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-discrete_distribution-08-2constructor-016[discrete&lowbar;distribution]();
----

[.small]#link:#mp_units-discrete_distribution-08-2constructor-016[_» more&period;&period;&period;_]#

Construct from `initializer&lowbar;list`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-discrete_distribution-08-2constructor-0b[discrete&lowbar;distribution](std::initializer&lowbar;list&lt;double&gt; weights);
----

[.small]#link:#mp_units-discrete_distribution-08-2constructor-0b[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename InputIt&gt;
link:#mp_units-discrete_distribution-08-2constructor-018[discrete&lowbar;distribution](
    InputIt first,
    InputIt last);
----

[.small]#link:#mp_units-discrete_distribution-08-2constructor-018[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename UnaryOperation&gt;
link:#mp_units-discrete_distribution-08-2constructor-07[discrete&lowbar;distribution](
    std::size&lowbar;t count,
    double xmin,
    double xmax,
    UnaryOperation unary&lowbar;op);
----

[.small]#link:#mp_units-discrete_distribution-08-2constructor-07[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
discrete&lowbar;distribution();
----

Construct from `initializer&lowbar;list`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
discrete&lowbar;distribution(std::initializer&lowbar;list&lt;double&gt; weights);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *weights*
| The object to construct from
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename InputIt&gt;
discrete&lowbar;distribution(
    InputIt first,
    InputIt last);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename UnaryOperation&gt;
discrete&lowbar;distribution(
    std::size&lowbar;t count,
    double xmin,
    double xmax,
    UnaryOperation unary&lowbar;op);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;integral&lt;typename Q&colon;&colon;rep&gt;
struct discrete&lowbar;distribution
    : std::discrete&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::discrete&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct exponential&lowbar;distribution
    : std::exponential&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::exponential&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-exponential_distribution-0e-base[`base`] 
| link:#mp_units-exponential_distribution-0e-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-exponential_distribution-0e-2constructor-0d[`exponential&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-exponential_distribution-0e-max[`max`] 
| 
| link:#mp_units-exponential_distribution-0e-min[`min`] 
| 
| link:#mp_units-exponential_distribution-0e-operator_call[`operator()`] 
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using base = std::exponential&lowbar;distribution&lt;rep&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Q::rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-exponential_distribution-0e-2constructor-02[exponential&lowbar;distribution]();
----

[.small]#link:#mp_units-exponential_distribution-0e-2constructor-02[_» more&period;&period;&period;_]#

Construct from `rep`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mp_units-exponential_distribution-0e-2constructor-08[exponential&lowbar;distribution](link:#mp_units-exponential_distribution-0e-rep[rep] const& lambda);
----

[.small]#link:#mp_units-exponential_distribution-0e-2constructor-08[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
exponential&lowbar;distribution();
----

Construct from `rep`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
exponential&lowbar;distribution(link:#mp_units-exponential_distribution-0e-rep[rep] const& lambda);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *lambda*
| The object to copy construct from
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;floating&lowbar;point&lt;typename Q&colon;&colon;rep&gt;
struct exponential&lowbar;distribution
    : std::exponential&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::exponential&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct extreme&lowbar;value&lowbar;distribution
    : std::extreme&lowbar;value&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::extreme&lowbar;value&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-extreme_value_distribution-0e-base[`base`] 
| link:#mp_units-extreme_value_distribution-0e-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-extreme_value_distribution-0e-2constructor-02[`extreme&lowbar;value&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-extreme_value_distribution-0e-a[`a`] 
| 
| link:#mp_units-extreme_value_distribution-0e-max[`max`] 
| 
| link:#mp_units-extreme_value_distribution-0e-min[`min`] 
| 
| link:#mp_units-extreme_value_distribution-0e-operator_call[`operator()`] 
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using base = std::extreme&lowbar;value&lowbar;distribution&lt;rep&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Q::rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-extreme_value_distribution-0e-2constructor-0c[extreme&lowbar;value&lowbar;distribution]();
----

[.small]#link:#mp_units-extreme_value_distribution-0e-2constructor-0c[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-extreme_value_distribution-0e-2constructor-05[extreme&lowbar;value&lowbar;distribution](
    Q const& a,
    link:#mp_units-extreme_value_distribution-0e-rep[rep] const& b);
----

[.small]#link:#mp_units-extreme_value_distribution-0e-2constructor-05[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
extreme&lowbar;value&lowbar;distribution();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
extreme&lowbar;value&lowbar;distribution(
    Q const& a,
    link:#mp_units-extreme_value_distribution-0e-rep[rep] const& b);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
a() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;floating&lowbar;point&lt;typename Q&colon;&colon;rep&gt;
struct extreme&lowbar;value&lowbar;distribution
    : std::extreme&lowbar;value&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::extreme&lowbar;value&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct fisher&lowbar;f&lowbar;distribution
    : std::fisher&lowbar;f&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::fisher&lowbar;f&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-fisher_f_distribution-02-base[`base`] 
| link:#mp_units-fisher_f_distribution-02-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-fisher_f_distribution-02-2constructor-01[`fisher&lowbar;f&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-fisher_f_distribution-02-max[`max`] 
| 
| link:#mp_units-fisher_f_distribution-02-min[`min`] 
| 
| link:#mp_units-fisher_f_distribution-02-operator_call[`operator()`] 
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using base = std::fisher&lowbar;f&lowbar;distribution&lt;rep&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Q::rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-fisher_f_distribution-02-2constructor-05[fisher&lowbar;f&lowbar;distribution]();
----

[.small]#link:#mp_units-fisher_f_distribution-02-2constructor-05[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-fisher_f_distribution-02-2constructor-09[fisher&lowbar;f&lowbar;distribution](
    link:#mp_units-fisher_f_distribution-02-rep[rep] const& m,
    link:#mp_units-fisher_f_distribution-02-rep[rep] const& n);
----

[.small]#link:#mp_units-fisher_f_distribution-02-2constructor-09[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
fisher&lowbar;f&lowbar;distribution();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
fisher&lowbar;f&lowbar;distribution(
    link:#mp_units-fisher_f_distribution-02-rep[rep] const& m,
    link:#mp_units-fisher_f_distribution-02-rep[rep] const& n);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;floating&lowbar;point&lt;typename Q&colon;&colon;rep&gt;
struct fisher&lowbar;f&lowbar;distribution
    : std::fisher&lowbar;f&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::fisher&lowbar;f&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct gamma&lowbar;distribution
    : std::gamma&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::gamma&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-gamma_distribution-0a4-base[`base`] 
| link:#mp_units-gamma_distribution-0a4-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-gamma_distribution-0a4-2constructor-0f[`gamma&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-gamma_distribution-0a4-max[`max`] 
| 
| link:#mp_units-gamma_distribution-0a4-min[`min`] 
| 
| link:#mp_units-gamma_distribution-0a4-operator_call[`operator()`] 
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using base = std::gamma&lowbar;distribution&lt;rep&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Q::rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-gamma_distribution-0a4-2constructor-09[gamma&lowbar;distribution]();
----

[.small]#link:#mp_units-gamma_distribution-0a4-2constructor-09[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-gamma_distribution-0a4-2constructor-0b[gamma&lowbar;distribution](
    link:#mp_units-gamma_distribution-0a4-rep[rep] const& alpha,
    link:#mp_units-gamma_distribution-0a4-rep[rep] const& beta);
----

[.small]#link:#mp_units-gamma_distribution-0a4-2constructor-0b[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
gamma&lowbar;distribution();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
gamma&lowbar;distribution(
    link:#mp_units-gamma_distribution-0a4-rep[rep] const& alpha,
    link:#mp_units-gamma_distribution-0a4-rep[rep] const& beta);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;floating&lowbar;point&lt;typename Q&colon;&colon;rep&gt;
struct gamma&lowbar;distribution
    : std::gamma&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::gamma&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct geometric&lowbar;distribution
    : std::geometric&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::geometric&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-geometric_distribution-08-base[`base`] 
| link:#mp_units-geometric_distribution-08-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-geometric_distribution-08-2constructor-0b[`geometric&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-geometric_distribution-08-max[`max`] 
| 
| link:#mp_units-geometric_distribution-08-min[`min`] 
| 
| link:#mp_units-geometric_distribution-08-operator_call[`operator()`] 
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using base = std::geometric&lowbar;distribution&lt;rep&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Q::rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-geometric_distribution-08-2constructor-02[geometric&lowbar;distribution]();
----

[.small]#link:#mp_units-geometric_distribution-08-2constructor-02[_» more&period;&period;&period;_]#

Construct from `double`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mp_units-geometric_distribution-08-2constructor-0e[geometric&lowbar;distribution](double p);
----

[.small]#link:#mp_units-geometric_distribution-08-2constructor-0e[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
geometric&lowbar;distribution();
----

Construct from `double`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
geometric&lowbar;distribution(double p);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *p*
| The value to construct from
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;integral&lt;typename Q&colon;&colon;rep&gt;
struct geometric&lowbar;distribution
    : std::geometric&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::geometric&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct is&lowbar;kind;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Q&gt;
struct kind&lowbar;of&lowbar;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-QuantitySpec[QuantitySpec] Q&gt;
requires (!detail&colon;&colon;QuantityKindSpec&lt;Q&gt;) &amp;&amp; (detail&colon;&colon;get&lowbar;kind&lowbar;tree&lowbar;root(Q&lcub;&rcub;) &equals;&equals; Q&lcub;&rcub;)
struct link:#mp_units-kind_of_-00[kind&lowbar;of&lowbar;]&lt;Q&gt; final
    : Q::&lowbar;base&lowbar;type&lowbar;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `Q::&lowbar;base&lowbar;type&lowbar;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-kind_of_-0d-_base_type_[`&lowbar;base&lowbar;type&lowbar;`] 
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mp_units-kind_of_-0d-_quantity_spec_[`&lowbar;quantity&lowbar;spec&lowbar;`] 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using &lowbar;base&lowbar;type&lowbar; = link:#mp_units-kind_of_-0d[kind&lowbar;of&lowbar;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;quantity&lowbar;spec&lowbar; = Q&lcub;&rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct lognormal&lowbar;distribution
    : std::lognormal&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::lognormal&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-lognormal_distribution-0e-base[`base`] 
| link:#mp_units-lognormal_distribution-0e-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-lognormal_distribution-0e-2constructor-0a[`lognormal&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-lognormal_distribution-0e-m[`m`] 
| 
| link:#mp_units-lognormal_distribution-0e-max[`max`] 
| 
| link:#mp_units-lognormal_distribution-0e-min[`min`] 
| 
| link:#mp_units-lognormal_distribution-0e-operator_call[`operator()`] 
| 
| link:#mp_units-lognormal_distribution-0e-s[`s`] 
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using base = std::lognormal&lowbar;distribution&lt;rep&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Q::rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-lognormal_distribution-0e-2constructor-04[lognormal&lowbar;distribution]();
----

[.small]#link:#mp_units-lognormal_distribution-0e-2constructor-04[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-lognormal_distribution-0e-2constructor-0b[lognormal&lowbar;distribution](
    Q const& m,
    Q const& s);
----

[.small]#link:#mp_units-lognormal_distribution-0e-2constructor-0b[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
lognormal&lowbar;distribution();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
lognormal&lowbar;distribution(
    Q const& m,
    Q const& s);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
m() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
s() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;floating&lowbar;point&lt;typename Q&colon;&colon;rep&gt;
struct lognormal&lowbar;distribution
    : std::lognormal&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::lognormal&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;magnitude&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-symbol_text-032[symbol&lowbar;text] Symbol,
    long double Value&gt;
requires (Value &gt; 0)
struct mag&lowbar;constant;
----

== Static Data Members

[cols=1]
|===
| Name
| link:#mp_units-mag_constant-_symbol_[`&lowbar;symbol&lowbar;`] 
| link:#mp_units-mag_constant-_value_[`&lowbar;value&lowbar;`] 
|===

== Derived Classes

[cols=2]
|===
| Name
| Description
| link:#mp_units-pi-0c[`pi`]
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;magnitude&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;symbol&lowbar; = Symbol;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;magnitude&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
long double &lowbar;value&lowbar; = Value;
----

A named unit

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-symbol_text-032[symbol&lowbar;text] Symbol,
    auto&period;&period;&period;&gt;
struct named&lowbar;unit;
----

== Derived Classes

[cols=2]
|===
| Name
| Description
| link:#mp_units-parts_per_million-0f[`parts&lowbar;per&lowbar;million`]
| 
| link:#mp_units-per_mille-01[`per&lowbar;mille`]
| 
| link:#mp_units-percent-02[`percent`]
| 
|===

== Description

Defines a unit with a special name&period; It may be used to provide a base unit in the system of units (e&period;g&period; `metre`) or a name assigned to another scaled or derived unit (e&period;g&period; `hour`, `joule`)&period; Most of the named units may be composed with a prefix to create a `prefixed&lowbar;unit`&period;

For example&colon;

[,cpp]
----
{.cpp}
 inline constexpr struct second final : named_unit<"s", kind_of<time>> {} second;
 inline constexpr struct metre final : named_unit<"m", kind_of<length> {} metre;
 inline constexpr struct hertz final : named_unit<"Hz", inverse(second), kind_of<frequency>> {} hertz;
 inline constexpr struct newton final : named_unit<"N", kilogram * metre / square(second)> {} newton;
 inline constexpr struct degree_Celsius final : named_unit<{u8"℃", "`C"}, kelvin, zeroth_degree_Celsius> {}
 degree_Celsius; inline constexpr struct minute final : named_unit<"min", mag<60> * second> {} minute;
----
[NOTE]
====
A common convention in this library is to assign the same name for a type and an object of this type&period; Besides defining them user never works with the unit types in the source code&period; All operations are done on the objects&period; Contrarily, the unit types are the only one visible in the compilation errors&period; Having them of the same names improves user experience and somehow blurs those separate domains&period;

====

== Template Parameters

[cols=2]
|===
| Name
| Description
| *Symbol*
| a short text representation of the unit
|===

Specialization for a unit that can be reused by several base quantities

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-symbol_text-032[symbol&lowbar;text] Symbol&gt;
requires (!Symbol&period;empty())
struct link:#mp_units-named_unit-0ec[named&lowbar;unit]&lt;Symbol&gt;
    : &sol;&ast; implementation-defined &ast;&sol;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `&sol;&ast; implementation-defined &ast;&sol;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-named_unit-06-_base_type_[`&lowbar;base&lowbar;type&lowbar;`] 
|===

== Static Data Members

[cols=2]
|===
| Name
| Description
| link:#mp_units-named_unit-06-_symbol_[`&lowbar;symbol&lowbar;`] 
| Unique base unit identifier
|===

== Description

This specialization is used in rare cases where more than one base quantity in a specific system of units uses the same unit&period; For example in a hypothetical system of natural units where constant for speed of light `c &equals; 1`, length and time could be measured in seconds&period; In such cases `system&lowbar;reference` has to be used to explicitly express such a binding&period;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *Symbol*
| a short text representation of the unit
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using &lowbar;base&lowbar;type&lowbar; = link:#mp_units-named_unit-06[named&lowbar;unit];
----

Unique base unit identifier

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;symbol&lowbar; = Symbol;
----

Specialization for unit of a specified base quantity

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-symbol_text-032[symbol&lowbar;text] Symbol,
    link:#mp_units-Unit[Unit] auto QS&gt;
requires (!Symbol&period;empty())
struct link:#mp_units-named_unit-0ec[named&lowbar;unit]&lt;Symbol, U&gt;
    : &sol;&ast; implementation-defined &ast;&sol;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `&sol;&ast; implementation-defined &ast;&sol;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-named_unit-07-_base_type_[`&lowbar;base&lowbar;type&lowbar;`] 
|===

== Static Data Members

[cols=2]
|===
| Name
| Description
| link:#mp_units-named_unit-07-_quantity_spec_[`&lowbar;quantity&lowbar;spec&lowbar;`] 
| 
| link:#mp_units-named_unit-07-_symbol_[`&lowbar;symbol&lowbar;`] 
| Unique base unit identifier
|===

== Description

Associates a unit with a specified base quantity&period; For example `si&colon;&colon;metre` is a unit to measure `isq&colon;&colon;length` in the SI system&period;

[NOTE]
====
This is the preferred way to define a measurement unit for a specific base quantity&period;

====

[NOTE]
====
It does not have to (or sometimes even can&apos;t) be a proper system&apos;s base unit&period; For example a base unit of mass in the SI is `si&colon;&colon;kilogram` but here you are about to provide an `si&colon;&colon;gram` and it will work just fine as those two are convertible to each other&period; A similar case would be the `cgs&colon;&colon;centimetre` that is a base unit for `isq&colon;&colon;length` in the CGS system&period;

====

Allows assigning a special name to another scaled or derived unit (e&period;g&period; `hour`, `joule`)&period;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *Symbol*
| a short text representation of the unit
| *QuantitySpec*
| a specification of a base quantity to be measured with this unit
| *Unit*
| a unit for which we provide a special name
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using &lowbar;base&lowbar;type&lowbar; = link:#mp_units-named_unit-07[named&lowbar;unit];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;quantity&lowbar;spec&lowbar; = QS;
----

Unique base unit identifier

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;symbol&lowbar; = Symbol;
----

== Description

Unique unit identifier

Specialization for a unit with special name valid only for a specific quantity

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-symbol_text-032[symbol&lowbar;text] Symbol,
    link:#mp_units-AssociatedUnit[AssociatedUnit] auto QS,
    &sol;&ast; implementation-defined &ast;&sol; auto PO&gt;
requires (!Symbol&period;empty()) &amp;&amp; (QS&period;dimension &equals;&equals; detail&colon;&colon;get&lowbar;associated&lowbar;quantity(U)&period;dimension)
struct link:#mp_units-named_unit-0ec[named&lowbar;unit]&lt;Symbol, U, QS&gt;
    : &sol;&ast; implementation-defined &ast;&sol;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `&sol;&ast; implementation-defined &ast;&sol;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-named_unit-05-_base_type_[`&lowbar;base&lowbar;type&lowbar;`] 
|===

== Static Data Members

[cols=2]
|===
| Name
| Description
| link:#mp_units-named_unit-05-_point_origin_[`&lowbar;point&lowbar;origin&lowbar;`] 
| 
| link:#mp_units-named_unit-05-_quantity_spec_[`&lowbar;quantity&lowbar;spec&lowbar;`] 
| 
| link:#mp_units-named_unit-05-_symbol_[`&lowbar;symbol&lowbar;`] 
| Unique base unit identifier
|===

== Description

The same as the above but additionally limits the usage of this unit to provided quantities&period;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *Symbol*
| a short text representation of the unit
| *Unit*
| a unit for which we provide a special name
| *QuantitySpec*
| a specification of a quantity to be measured with this unit
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using &lowbar;base&lowbar;type&lowbar; = link:#mp_units-named_unit-05[named&lowbar;unit];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;point&lowbar;origin&lowbar; = PO;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;quantity&lowbar;spec&lowbar; = QS;
----

Unique base unit identifier

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;symbol&lowbar; = Symbol;
----

== Description

Unique unit identifier

Unique unit identifier

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-symbol_text-032[symbol&lowbar;text] Symbol,
    link:#mp_units-AssociatedUnit[AssociatedUnit] auto U,
    &sol;&ast; implementation-defined &ast;&sol; auto QS,
    link:#mp_units-PointOrigin[PointOrigin] auto PO&gt;
requires (!Symbol&period;empty()) &amp;&amp; (QS&period;dimension &equals;&equals; detail&colon;&colon;get&lowbar;associated&lowbar;quantity(U)&period;dimension)
struct link:#mp_units-named_unit-0ec[named&lowbar;unit]&lt;Symbol, U, QS, PO&gt;
    : ::&lowbar;base&lowbar;type&lowbar;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `::&lowbar;base&lowbar;type&lowbar;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-named_unit-0e4-_base_type_[`&lowbar;base&lowbar;type&lowbar;`] 
|===

== Static Data Members

[cols=2]
|===
| Name
| Description
| link:#mp_units-named_unit-0e4-_point_origin_[`&lowbar;point&lowbar;origin&lowbar;`] 
| 
| link:#mp_units-named_unit-0e4-_quantity_spec_[`&lowbar;quantity&lowbar;spec&lowbar;`] 
| 
| link:#mp_units-named_unit-0e4-_symbol_[`&lowbar;symbol&lowbar;`] 
| Unique unit identifier
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using &lowbar;base&lowbar;type&lowbar; = link:#mp_units-named_unit-0e4[named&lowbar;unit];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;point&lowbar;origin&lowbar; = PO;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;quantity&lowbar;spec&lowbar; = QS;
----

Unique unit identifier

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;symbol&lowbar; = Symbol;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct negative&lowbar;binomial&lowbar;distribution
    : std::negative&lowbar;binomial&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::negative&lowbar;binomial&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-negative_binomial_distribution-0f-base[`base`] 
| link:#mp_units-negative_binomial_distribution-0f-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-negative_binomial_distribution-0f-2constructor-0e[`negative&lowbar;binomial&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-negative_binomial_distribution-0f-k[`k`] 
| 
| link:#mp_units-negative_binomial_distribution-0f-max[`max`] 
| 
| link:#mp_units-negative_binomial_distribution-0f-min[`min`] 
| 
| link:#mp_units-negative_binomial_distribution-0f-operator_call[`operator()`] 
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using base = std::negative&lowbar;binomial&lowbar;distribution&lt;rep&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Q::rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-negative_binomial_distribution-0f-2constructor-0d[negative&lowbar;binomial&lowbar;distribution]();
----

[.small]#link:#mp_units-negative_binomial_distribution-0f-2constructor-0d[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-negative_binomial_distribution-0f-2constructor-0f[negative&lowbar;binomial&lowbar;distribution](
    Q const& k,
    double p);
----

[.small]#link:#mp_units-negative_binomial_distribution-0f-2constructor-0f[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
negative&lowbar;binomial&lowbar;distribution();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
negative&lowbar;binomial&lowbar;distribution(
    Q const& k,
    double p);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
k() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;integral&lt;typename Q&colon;&colon;rep&gt;
struct negative&lowbar;binomial&lowbar;distribution
    : std::negative&lowbar;binomial&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::negative&lowbar;binomial&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct normal&lowbar;distribution
    : std::normal&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::normal&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-normal_distribution-0a-base[`base`] 
| link:#mp_units-normal_distribution-0a-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-normal_distribution-0a-2constructor-08[`normal&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-normal_distribution-0a-max[`max`] 
| 
| link:#mp_units-normal_distribution-0a-mean[`mean`] 
| 
| link:#mp_units-normal_distribution-0a-min[`min`] 
| 
| link:#mp_units-normal_distribution-0a-operator_call[`operator()`] 
| 
| link:#mp_units-normal_distribution-0a-stddev[`stddev`] 
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using base = std::normal&lowbar;distribution&lt;rep&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Q::rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-normal_distribution-0a-2constructor-0a0[normal&lowbar;distribution]();
----

[.small]#link:#mp_units-normal_distribution-0a-2constructor-0a0[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-normal_distribution-0a-2constructor-0a8[normal&lowbar;distribution](
    Q const& mean,
    Q const& stddev);
----

[.small]#link:#mp_units-normal_distribution-0a-2constructor-0a8[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
normal&lowbar;distribution();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
normal&lowbar;distribution(
    Q const& mean,
    Q const& stddev);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
mean() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
stddev() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;floating&lowbar;point&lt;typename Q&colon;&colon;rep&gt;
struct normal&lowbar;distribution
    : std::normal&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::normal&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

Unit one

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct one final
    : &sol;&ast; implementation-defined &ast;&sol;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `&sol;&ast; implementation-defined &ast;&sol;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-one-0f-_base_type_[`&lowbar;base&lowbar;type&lowbar;`] 
|===

== Description

Unit of a dimensionless quantity&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using &lowbar;base&lowbar;type&lowbar; = &sol;&ast; implementation-defined &ast;&sol;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct parts&lowbar;per&lowbar;million final
    : link:#mp_units-named_unit-0ec[named&lowbar;unit&lt;&quot;ppm&quot;, mag&lowbar;ratio&lt;1, 1000000&gt; &ast; one&gt;]
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `link:#mp_units-named_unit-0ec[named&lowbar;unit&lt;&quot;ppm&quot;, mag&lowbar;ratio&lt;1, 1000000&gt; &ast; one&gt;]`
| A named unit
|===

Type list type storing the list of components with negative exponents

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbolic&lowbar;expression&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    &sol;&ast; implementation-defined &ast;&sol; T,
    &sol;&ast; implementation-defined &ast;&sol;&period;&period;&period; Ts&gt;
struct per final
----

== Description

[NOTE]
====
Can&apos;t be empty

====

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct per&lowbar;mille final
    : link:#mp_units-named_unit-0ec[named&lowbar;unit&lt;symbol&lowbar;text&lt;4UL &hyphen; 1, 3UL &hyphen; 1&gt;&lcub;u8&quot;&bsol;342&bsol;200&bsol;260&quot;, &quot;%o&quot;&rcub;, mag&lowbar;ratio&lt;1, 1000&gt; &ast; one&gt;]
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `link:#mp_units-named_unit-0ec[named&lowbar;unit&lt;symbol&lowbar;text&lt;4UL &hyphen; 1, 3UL &hyphen; 1&gt;&lcub;u8&quot;&bsol;342&bsol;200&bsol;260&quot;, &quot;%o&quot;&rcub;, mag&lowbar;ratio&lt;1, 1000&gt; &ast; one&gt;]`
| A named unit
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct percent final
    : link:#mp_units-named_unit-0ec[named&lowbar;unit&lt;&quot;%&quot;, mag&lowbar;ratio&lt;1, 100&gt; &ast; one&gt;]
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `link:#mp_units-named_unit-0ec[named&lowbar;unit&lt;&quot;%&quot;, mag&lowbar;ratio&lt;1, 100&gt; &ast; one&gt;]`
| A named unit
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;magnitude&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct pi final
    : link:#mp_units-mag_constant[mag&lowbar;constant&lt;symbol&lowbar;text&lt;3UL &hyphen; 1, 3UL &hyphen; 1&gt;&lcub;u8&quot;&bsol;317&bsol;200&quot;, &quot;pi&quot;&rcub;, std&colon;&colon;numbers&colon;&colon;pi&lowbar;v&lt;long double&gt;&gt;]
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `link:#mp_units-mag_constant[mag&lowbar;constant&lt;symbol&lowbar;text&lt;3UL &hyphen; 1, 3UL &hyphen; 1&gt;&lcub;u8&quot;&bsol;317&bsol;200&quot;, &quot;pi&quot;&rcub;, std&colon;&colon;numbers&colon;&colon;pi&lowbar;v&lt;long double&gt;&gt;]`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class piecewise&lowbar;constant&lowbar;distribution
    : public std::piecewise&lowbar;constant&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::piecewise&lowbar;constant&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-piecewise_constant_distribution-0d-2constructor-0b[`piecewise&lowbar;constant&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-piecewise_constant_distribution-0d-intervals[`intervals`] 
| 
| link:#mp_units-piecewise_constant_distribution-0d-max[`max`] 
| 
| link:#mp_units-piecewise_constant_distribution-0d-min[`min`] 
| 
| link:#mp_units-piecewise_constant_distribution-0d-operator_call[`operator()`] 
| 
|===

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-piecewise_constant_distribution-0d-2constructor-04[piecewise&lowbar;constant&lowbar;distribution]();
----

[.small]#link:#mp_units-piecewise_constant_distribution-0d-2constructor-04[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename UnaryOperation&gt;
link:#mp_units-piecewise_constant_distribution-0d-2constructor-07[piecewise&lowbar;constant&lowbar;distribution](
    std::initializer&lowbar;list&lt;Q&gt; bl,
    UnaryOperation fw);
----

[.small]#link:#mp_units-piecewise_constant_distribution-0d-2constructor-07[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename InputIt1,
    typename InputIt2&gt;
link:#mp_units-piecewise_constant_distribution-0d-2constructor-0d[piecewise&lowbar;constant&lowbar;distribution](
    InputIt1 first&lowbar;i,
    InputIt1 last&lowbar;i,
    InputIt2 first&lowbar;w);
----

[.small]#link:#mp_units-piecewise_constant_distribution-0d-2constructor-0d[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename UnaryOperation&gt;
link:#mp_units-piecewise_constant_distribution-0d-2constructor-09[piecewise&lowbar;constant&lowbar;distribution](
    std::size&lowbar;t nw,
    Q const& xmin,
    Q const& xmax,
    UnaryOperation fw);
----

[.small]#link:#mp_units-piecewise_constant_distribution-0d-2constructor-09[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
piecewise&lowbar;constant&lowbar;distribution();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename UnaryOperation&gt;
piecewise&lowbar;constant&lowbar;distribution(
    std::initializer&lowbar;list&lt;Q&gt; bl,
    UnaryOperation fw);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename InputIt1,
    typename InputIt2&gt;
piecewise&lowbar;constant&lowbar;distribution(
    InputIt1 first&lowbar;i,
    InputIt1 last&lowbar;i,
    InputIt2 first&lowbar;w);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename UnaryOperation&gt;
piecewise&lowbar;constant&lowbar;distribution(
    std::size&lowbar;t nw,
    Q const& xmin,
    Q const& xmax,
    UnaryOperation fw);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::vector&lt;Q&gt;
intervals() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;floating&lowbar;point&lt;typename Q&colon;&colon;rep&gt;
class piecewise&lowbar;constant&lowbar;distribution
    : public std::piecewise&lowbar;constant&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::piecewise&lowbar;constant&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
class piecewise&lowbar;linear&lowbar;distribution
    : public std::piecewise&lowbar;linear&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::piecewise&lowbar;linear&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-piecewise_linear_distribution-059-2constructor-0eb[`piecewise&lowbar;linear&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-piecewise_linear_distribution-059-intervals[`intervals`] 
| 
| link:#mp_units-piecewise_linear_distribution-059-max[`max`] 
| 
| link:#mp_units-piecewise_linear_distribution-059-min[`min`] 
| 
| link:#mp_units-piecewise_linear_distribution-059-operator_call[`operator()`] 
| 
|===

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-piecewise_linear_distribution-059-2constructor-04[piecewise&lowbar;linear&lowbar;distribution]();
----

[.small]#link:#mp_units-piecewise_linear_distribution-059-2constructor-04[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename UnaryOperation&gt;
link:#mp_units-piecewise_linear_distribution-059-2constructor-07[piecewise&lowbar;linear&lowbar;distribution](
    std::initializer&lowbar;list&lt;Q&gt; bl,
    UnaryOperation fw);
----

[.small]#link:#mp_units-piecewise_linear_distribution-059-2constructor-07[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename InputIt1,
    typename InputIt2&gt;
link:#mp_units-piecewise_linear_distribution-059-2constructor-0c6[piecewise&lowbar;linear&lowbar;distribution](
    InputIt1 first&lowbar;i,
    InputIt1 last&lowbar;i,
    InputIt2 first&lowbar;w);
----

[.small]#link:#mp_units-piecewise_linear_distribution-059-2constructor-0c6[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename UnaryOperation&gt;
link:#mp_units-piecewise_linear_distribution-059-2constructor-0cd[piecewise&lowbar;linear&lowbar;distribution](
    std::size&lowbar;t nw,
    Q const& xmin,
    Q const& xmax,
    UnaryOperation fw);
----

[.small]#link:#mp_units-piecewise_linear_distribution-059-2constructor-0cd[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
piecewise&lowbar;linear&lowbar;distribution();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename UnaryOperation&gt;
piecewise&lowbar;linear&lowbar;distribution(
    std::initializer&lowbar;list&lt;Q&gt; bl,
    UnaryOperation fw);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename InputIt1,
    typename InputIt2&gt;
piecewise&lowbar;linear&lowbar;distribution(
    InputIt1 first&lowbar;i,
    InputIt1 last&lowbar;i,
    InputIt2 first&lowbar;w);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename UnaryOperation&gt;
piecewise&lowbar;linear&lowbar;distribution(
    std::size&lowbar;t nw,
    Q const& xmin,
    Q const& xmax,
    UnaryOperation fw);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
std::vector&lt;Q&gt;
intervals() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;floating&lowbar;point&lt;typename Q&colon;&colon;rep&gt;
class piecewise&lowbar;linear&lowbar;distribution
    : public std::piecewise&lowbar;linear&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::piecewise&lowbar;linear&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;construction&lowbar;helpers&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Reference[Reference] R&gt;
struct point&lowbar;;
----

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-point_-operator_call[`operator()`] 
| Function call operator
|===

Function call operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;construction&lowbar;helpers&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdRep,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;get&lowbar;quantity&lowbar;spec(R&lcub;&rcub;)&gt;] Rep = std::remove&lowbar;cvref&lowbar;t&lt;FwdRep&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;R&lcub;&rcub;, default&lowbar;point&lowbar;origin(R&lcub;&rcub;), Rep&gt;]
operator()(FwdRep&& lhs) const;
----

== Return Value

A quantity point

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The right operand
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct poisson&lowbar;distribution
    : std::poisson&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::poisson&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-poisson_distribution-098-base[`base`] 
| link:#mp_units-poisson_distribution-098-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-poisson_distribution-098-2constructor-08[`poisson&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-poisson_distribution-098-max[`max`] 
| 
| link:#mp_units-poisson_distribution-098-min[`min`] 
| 
| link:#mp_units-poisson_distribution-098-operator_call[`operator()`] 
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using base = std::poisson&lowbar;distribution&lt;rep&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Q::rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-poisson_distribution-098-2constructor-0e[poisson&lowbar;distribution]();
----

[.small]#link:#mp_units-poisson_distribution-098-2constructor-0e[_» more&period;&period;&period;_]#

Construct from `double`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mp_units-poisson_distribution-098-2constructor-00[poisson&lowbar;distribution](double p);
----

[.small]#link:#mp_units-poisson_distribution-098-2constructor-00[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
poisson&lowbar;distribution();
----

Construct from `double`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
poisson&lowbar;distribution(double p);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *p*
| The value to construct from
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;integral&lt;typename Q&colon;&colon;rep&gt;
struct poisson&lowbar;distribution
    : std::poisson&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::poisson&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

Type container for exponents with ratio different than `1`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbolic&lowbar;expression&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    &sol;&ast; implementation-defined &ast;&sol; F,
    int Num,
    int Den&period;&period;&period;&gt;
requires (detail&colon;&colon;valid&lowbar;ratio&lt;Num, Den&period;&period;&period;&gt; &amp;&amp; detail&colon;&colon;positive&lowbar;ratio&lt;Num, Den&period;&period;&period;&gt; &amp;&amp; !detail&colon;&colon;ratio&lowbar;one&lt;Num, Den&period;&period;&period;&gt;)
struct power final
----

== Types

[cols=1]
|===
| Name
| link:#mp_units-power-_factor_[`&lowbar;factor&lowbar;`] 
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mp_units-power-_exponent_[`&lowbar;exponent&lowbar;`] 
|===

== Description

Ratio must be mathematically valid and non&hyphen;negative&period; Negative exponents are passed to `per&lt;&period;&period;&period;&gt;` with inverted sign (as positive exponents)&period;

[NOTE]
====
`Den` is an optional parameter to shorten the types presented to the user in the case when `Den` equals `1`&period;

====

== Template Parameters

[cols=2]
|===
| Name
| Description
| *F*
| factor to be raised to specified power
| *Num*
| Power ratio numerator
| *Den*
| &lsqb;optional&rsqb;Power ration denominator
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbolic&lowbar;expression&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using &lowbar;factor&lowbar; = F;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbolic&lowbar;expression&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
&sol;&ast; implementation-defined &ast;&sol; &lowbar;exponent&lowbar; = &lcub;Num, Den&period;&period;&period;&rcub;;
----

A prefixed unit

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-symbol_text-032[symbol&lowbar;text] Symbol,
    link:#mp_units-UnitMagnitude[UnitMagnitude] auto M,
    link:#mp_units-PrefixableUnit[PrefixableUnit] auto U&gt;
requires (!Symbol&period;empty())
struct prefixed&lowbar;unit
    : ::&lowbar;base&lowbar;type&lowbar;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `::&lowbar;base&lowbar;type&lowbar;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-prefixed_unit-_base_type_[`&lowbar;base&lowbar;type&lowbar;`] 
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mp_units-prefixed_unit-_symbol_[`&lowbar;symbol&lowbar;`] 
|===

== Description

Defines a new unit that is a scaled version of another unit with the scaling factor specified by a predefined prefix&period;

For example&colon;

[,cpp]
----
{.cpp}
 template<PrefixableUnit auto U>
 struct kilo_ : prefixed_unit<"k", mag_power<10, 3>, U> {};

 template<PrefixableUnit auto U>
 constexpr kilo_<U> kilo;

 inline constexpr auto kilogram = si::kilo<gram>;
----
== Template Parameters

[cols=2]
|===
| Name
| Description
| *Symbol*
| a prefix text to prepend to a unit symbol
| *M*
| scaling factor of the prefix
| *U*
| a named unit to be prefixed
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using &lowbar;base&lowbar;type&lowbar; = link:#mp_units-prefixed_unit[prefixed&lowbar;unit];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;symbol&lowbar; = Symbol &plus; U&period;&lowbar;symbol&lowbar;;
----

A quantity

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Reference[Reference] auto R,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;get&lowbar;quantity&lowbar;spec(R)&gt;] Rep&gt;
class quantity;
----

== Types

[cols=1]
|===
| Name
| link:#mp_units-quantity-01-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-quantity-01-2constructor-06a[`quantity`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-quantity-01-2destructor[`&#126;quantity`] [.small]#[destructor]#
| Destructor
| link:#mp_units-quantity-01-operator_assign-0ed[`operator&equals;`] 
| Assignment operators
| link:#mp_units-quantity-01-force_in-02[`force&lowbar;in`] 
| 
| link:#mp_units-quantity-01-force_numerical_value_in[`force&lowbar;numerical&lowbar;value&lowbar;in`] 
| 
| link:#mp_units-quantity-01-in-08[`in`] 
| 
| link:#mp_units-quantity-01-numerical_value_in[`numerical&lowbar;value&lowbar;in`] 
| 
| link:#mp_units-quantity-01-numerical_value_ref_in-0d[`numerical&lowbar;value&lowbar;ref&lowbar;in`] 
| 
| link:#mp_units-quantity-01-operator_mod_eq[`operator%&equals;`] 
| Modulus assignment operator
| link:#mp_units-quantity-01-operator_star_eq-01[`operator&ast;&equals;`] 
| Multiplication assignment operators
| link:#mp_units-quantity-01-operator_plus[`operator&plus;`] 
| 
| link:#mp_units-quantity-01-operator_inc-0e[`operator&plus;&plus;`] 
| Increment operators
| link:#mp_units-quantity-01-operator_plus_eq[`operator&plus;&equals;`] 
| Addition assignment operator
| link:#mp_units-quantity-01-operator_minus[`operator&hyphen;`] 
| 
| link:#mp_units-quantity-01-operator_dec-07[`operator&hyphen;&hyphen;`] 
| Decrement operators
| link:#mp_units-quantity-01-operator_minus_eq[`operator&hyphen;&equals;`] 
| Subtraction assignment operator
| link:#mp_units-quantity-01-operator_slash_eq-04[`operator&sol;&equals;`] 
| Division assignment operators
| link:#mp_units-quantity-01-2conversion-0a[`operator `] 
| Conversion operators
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mp_units-quantity-01-max[`max`] 
| link:#mp_units-quantity-01-min[`min`] 
| link:#mp_units-quantity-01-zero[`zero`] 
|===

== Data Members

[cols=2]
|===
| Name
| Description
| link:#mp_units-quantity-01-numerical_value_is_an_implementation_detail_[`numerical&lowbar;value&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;`] 
| needs to be public for a structural type
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mp_units-quantity-01-dimension[`dimension`] 
| link:#mp_units-quantity-01-quantity_spec[`quantity&lowbar;spec`] 
| link:#mp_units-quantity-01-reference[`reference`] 
| link:#mp_units-quantity-01-unit[`unit`] 
|===

== Friends

[cols=2]
|===
| Name
| Description
| `link:#mp_units-operator_3way-01[mp&lowbar;units::operator&lt;&equals;&gt;]`
| Three&hyphen;way comparison operator
| `link:#mp_units-operator_3way-07[mp&lowbar;units::operator&lt;&equals;&gt;]`
| Three&hyphen;way comparison operator
| `link:#mp_units-operator_eq-010[mp&lowbar;units::operator&equals;&equals;]`
| Equality operator
| `link:#mp_units-operator_eq-09[mp&lowbar;units::operator&equals;&equals;]`
| Equality operator
| `link:#mp_units-operator_slash-0ad[mp&lowbar;units::operator&sol;]`
| 
| `link:#mp_units-operator_slash-09[mp&lowbar;units::operator&sol;]`
| 
| `link:#mp_units-operator_slash-05[mp&lowbar;units::operator&sol;]`
| 
| `link:#mp_units-operator_star-03[mp&lowbar;units::operator&ast;]`
| 
| `link:#mp_units-operator_star-002[mp&lowbar;units::operator&ast;]`
| 
| `link:#mp_units-operator_star-08dc[mp&lowbar;units::operator&ast;]`
| 
| `link:#mp_units-operator_mod-0d[mp&lowbar;units::operator%]`
| 
| `link:#mp_units-operator_mod-09[mp&lowbar;units::operator%]`
| 
| `link:#mp_units-operator_mod-05[mp&lowbar;units::operator%]`
| 
| `link:#mp_units-operator_minus-079[mp&lowbar;units::operator&hyphen;]`
| 
| `link:#mp_units-operator_minus-0a[mp&lowbar;units::operator&hyphen;]`
| 
| `link:#mp_units-operator_minus-03[mp&lowbar;units::operator&hyphen;]`
| 
| `link:#mp_units-operator_plus-0b[mp&lowbar;units::operator&plus;]`
| 
| `link:#mp_units-operator_plus-0f[mp&lowbar;units::operator&plus;]`
| 
| `link:#mp_units-operator_plus-06d[mp&lowbar;units::operator&plus;]`
| 
|===

== Non-Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-abs[`abs`]
| Computes the absolute value of a quantity
| link:#mp_units-cbrt-0d[`cbrt`]
| Computes the cubic root of a quantity
| link:#mp_units-ceil[`ceil`]
| Computes the smallest quantity with integer representation and unit type To with its number not less than q
| link:#mp_units-epsilon[`epsilon`]
| Returns the epsilon of the quantity
| link:#mp_units-exp[`exp`]
| Computes Euler&apos;s raised to the given power
| link:#mp_units-floor[`floor`]
| Computes the largest quantity with integer representation and unit type To with its number not greater than q
| link:#mp_units-fma-09[`fma`]
| Computes the fma of 3 quantities
| link:#mp_units-fma-0a[`fma`]
| Computes the fma of 2 quantities and a quantity point
| link:#mp_units-fmod[`fmod`]
| Computes the floating&hyphen;point remainder of the division operation x &sol; y&period;
| link:#mp_units-hypot-08[`hypot`]
| Computes the square root of the sum of the squares of x, y, and z, without undue overflow or underflow at intermediate stages of the computation
| link:#mp_units-hypot-0e[`hypot`]
| Computes the square root of the sum of the squares of x and y, without undue overflow or underflow at intermediate stages of the computation
| link:#mp_units-inverse-09[`inverse`]
| Computes the inverse of a quantity in a provided unit
| link:#mp_units-isfinite-0d[`isfinite`]
| Determines if a quantity is finite&period;
| link:#mp_units-isinf-0f[`isinf`]
| Determines if a quantity is infinite&period;
| link:#mp_units-isnan-00[`isnan`]
| Determines if a quantity is a nan&period;
| link:#mp_units-operator_star-07[`operator&ast;`]
| Multiplication operator
| link:#mp_units-pow-05[`pow`]
| Computes the value of a quantity raised to the `Num&sol;Den` power
| link:#mp_units-remainder[`remainder`]
| Computes the IEEE remainder of the floating point division operation x &sol; y&period;
| link:#mp_units-round[`round`]
| Computes the nearest quantity with integer representation and unit type `To` to `q`
| link:#mp_units-sqrt-0b[`sqrt`]
| Computes the square root of a quantity
| link:#mp_units-value_cast-0e[`value&lowbar;cast`]
| Explicit cast of a quantity&apos;s representation type
|===

== Description

Property of a phenomenon, body, or substance, where the property has a magnitude that can be expressed by means of a number and a reference&period;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *R*
| a reference of the quantity providing all information about quantity properties
| *Rep*
| a type to be used to represent values of a quantity
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-quantity-01-2constructor-062[quantity]() = default;
----

[.small]#link:#mp_units-quantity-01-2constructor-062[_» more&period;&period;&period;_]#

Copy constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-quantity-01-2constructor-000[quantity](link:#mp_units-quantity-01[quantity] const& other) = default;
----

[.small]#link:#mp_units-quantity-01-2constructor-000[_» more&period;&period;&period;_]#

Copy constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R2,
    typename Rep2&gt;
requires detail&colon;&colon;QuantityConstructibleFrom&lt;quantity, quantity&lt;R2, Rep2&gt;&gt;
constexpr
explicit(!implicitly&lowbar;convertible(get&lowbar;quantity&lowbar;spec(R2), quantity&lowbar;spec) &verbar;&verbar; !std&colon;&colon;convertible&lowbar;to&lt;Rep2, rep&gt;)
link:#mp_units-quantity-01-2constructor-00d[quantity](link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& q);
----

[.small]#link:#mp_units-quantity-01-2constructor-00d[_» more&period;&period;&period;_]#

Move constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-quantity-01-2constructor-01[quantity](link:#mp_units-quantity-01[quantity]&& other) = default;
----

[.small]#link:#mp_units-quantity-01-2constructor-01[_» more&period;&period;&period;_]#

Construct from `Q`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-QuantityLike[QuantityLike] Q&gt;
requires detail&colon;&colon;QuantityConstructibleFrom&lt;quantity, detail&colon;&colon;quantity&lowbar;like&lowbar;type&lt;Q&gt;&gt;
constexpr
explicit(quantity&lowbar;like&lowbar;traits&lt;Q&gt;&colon;&colon;explicit&lowbar;import &verbar;&verbar; !std&colon;&colon;convertible&lowbar;to&lt;detail&colon;&colon;quantity&lowbar;like&lowbar;type&lt;Q&gt;, quantity&lt;R, Rep&gt;&gt;)
link:#mp_units-quantity-01-2constructor-066[quantity](Q const& q);
----

[.small]#link:#mp_units-quantity-01-2constructor-066[_» more&period;&period;&period;_]#

Construct from `FwdValue`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename FwdValue&gt;
requires detail&colon;&colon;DimensionlessOne&lt;reference&gt; &amp;&amp; detail&colon;&colon;ValuePreservingConstruction&lt;rep, FwdValue&gt;
constexpr
explicit(!std&colon;&colon;convertible&lowbar;to&lt;FwdValue, rep&gt;)
link:#mp_units-quantity-01-2constructor-09[quantity](FwdValue&& val);
----

[.small]#link:#mp_units-quantity-01-2constructor-09[_» more&period;&period;&period;_]#

Constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdValue,
    link:#mp_units-Reference[Reference] R2&gt;
requires (equivalent(unit, get&lowbar;unit(R2&lcub;&rcub;))) &amp;&amp; detail&colon;&colon;ValuePreservingConstruction&lt;rep, FwdValue&gt;
constexpr
link:#mp_units-quantity-01-2constructor-05[quantity](
    FwdValue&& val,
    R2);
----

[.small]#link:#mp_units-quantity-01-2constructor-05[_» more&period;&period;&period;_]#

Constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdValue,
    link:#mp_units-Reference[Reference] R2&gt;
requires (!equivalent(unit, get&lowbar;unit(R2&lcub;&rcub;))) &amp;&amp;
            detail&colon;&colon;QuantityConstructibleFrom&lt;quantity, quantity&lt;R2&lcub;&rcub;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;FwdValue&gt;&gt;&gt;
constexpr
link:#mp_units-quantity-01-2constructor-04[quantity](
    FwdValue&& val,
    R2);
----

[.small]#link:#mp_units-quantity-01-2constructor-04[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
quantity() = default;
----

Copy constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
quantity(link:#mp_units-quantity-01[quantity] const& other) = default;
----

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to copy construct from
|===

Copy constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R2,
    typename Rep2&gt;
requires detail&colon;&colon;QuantityConstructibleFrom&lt;quantity, quantity&lt;R2, Rep2&gt;&gt;
constexpr
explicit(!implicitly&lowbar;convertible(get&lowbar;quantity&lowbar;spec(R2), quantity&lowbar;spec) &verbar;&verbar; !std&colon;&colon;convertible&lowbar;to&lt;Rep2, rep&gt;)
quantity(link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& q);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *q*
| The object to copy construct from
|===

Move constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
quantity(link:#mp_units-quantity-01[quantity]&& other) = default;
----

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to move construct from
|===

Construct from `Q`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-QuantityLike[QuantityLike] Q&gt;
requires detail&colon;&colon;QuantityConstructibleFrom&lt;quantity, detail&colon;&colon;quantity&lowbar;like&lowbar;type&lt;Q&gt;&gt;
constexpr
explicit(quantity&lowbar;like&lowbar;traits&lt;Q&gt;&colon;&colon;explicit&lowbar;import &verbar;&verbar; !std&colon;&colon;convertible&lowbar;to&lt;detail&colon;&colon;quantity&lowbar;like&lowbar;type&lt;Q&gt;, quantity&lt;R, Rep&gt;&gt;)
quantity(Q const& q);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *q*
| The object to copy construct from
|===

Construct from `FwdValue`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename FwdValue&gt;
requires detail&colon;&colon;DimensionlessOne&lt;reference&gt; &amp;&amp; detail&colon;&colon;ValuePreservingConstruction&lt;rep, FwdValue&gt;
constexpr
explicit(!std&colon;&colon;convertible&lowbar;to&lt;FwdValue, rep&gt;)
quantity(FwdValue&& val);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *val*
| The object to move construct from
|===

Constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdValue,
    link:#mp_units-Reference[Reference] R2&gt;
requires (equivalent(unit, get&lowbar;unit(R2&lcub;&rcub;))) &amp;&amp; detail&colon;&colon;ValuePreservingConstruction&lt;rep, FwdValue&gt;
constexpr
quantity(
    FwdValue&& val,
    R2);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *val*
| The object to move construct from
|===

Constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdValue,
    link:#mp_units-Reference[Reference] R2&gt;
requires (!equivalent(unit, get&lowbar;unit(R2&lcub;&rcub;))) &amp;&amp;
            detail&colon;&colon;QuantityConstructibleFrom&lt;quantity, quantity&lt;R2&lcub;&rcub;, std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;FwdValue&gt;&gt;&gt;
constexpr
quantity(
    FwdValue&& val,
    R2);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *val*
| The object to move construct from
|===

Destructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;quantity() = default;
----

Assignment operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

Copy assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-quantity-01[quantity]&
link:#mp_units-quantity-01-operator_assign-0eb[operator&equals;](link:#mp_units-quantity-01[quantity] const& other) = default;
----

[.small]#link:#mp_units-quantity-01-operator_assign-0eb[_» more&period;&period;&period;_]#

Move assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-quantity-01[quantity]&
link:#mp_units-quantity-01-operator_assign-05[operator&equals;](link:#mp_units-quantity-01[quantity]&& other) = default;
----

[.small]#link:#mp_units-quantity-01-operator_assign-05[_» more&period;&period;&period;_]#

Assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename FwdValue&gt;
requires detail&colon;&colon;DimensionlessOne&lt;reference&gt; &amp;&amp; detail&colon;&colon;ValuePreservingAssignment&lt;rep, FwdValue&gt;
constexpr
link:#mp_units-quantity-01[quantity]&
link:#mp_units-quantity-01-operator_assign-0f[operator&equals;](FwdValue&& val);
----

[.small]#link:#mp_units-quantity-01-operator_assign-0f[_» more&period;&period;&period;_]#

Copy assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-quantity-01[quantity]&
operator&equals;(link:#mp_units-quantity-01[quantity] const& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to copy assign from
|===

Move assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-quantity-01[quantity]&
operator&equals;(link:#mp_units-quantity-01[quantity]&& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to move assign from
|===

Assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename FwdValue&gt;
requires detail&colon;&colon;DimensionlessOne&lt;reference&gt; &amp;&amp; detail&colon;&colon;ValuePreservingAssignment&lt;rep, FwdValue&gt;
constexpr
link:#mp_units-quantity-01[quantity]&
operator&equals;(FwdValue&& val);
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *val*
| The object to move assign from
|===

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] ToRep&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;ToRep, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
link:#mp_units-quantity-01-force_in-06[force&lowbar;in]() const;
----

[.small]#link:#mp_units-quantity-01-force_in-06[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; ToU&gt;
requires detail&colon;&colon;SaneScaling&lt;unit, ToU&lcub;&rcub;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
link:#mp_units-quantity-01-force_in-005[force&lowbar;in](ToU) const;
----

[.small]#link:#mp_units-quantity-01-force_in-005[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] ToRep,
    &sol;&ast; implementation-defined &ast;&sol; ToU&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;ToRep, rep&gt; &amp;&amp; detail&colon;&colon;SaneScaling&lt;unit, ToU&lcub;&rcub;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
link:#mp_units-quantity-01-force_in-00f[force&lowbar;in](ToU) const;
----

[.small]#link:#mp_units-quantity-01-force_in-00f[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] ToRep&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;ToRep, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
force&lowbar;in() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; ToU&gt;
requires detail&colon;&colon;SaneScaling&lt;unit, ToU&lcub;&rcub;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
force&lowbar;in(ToU) const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] ToRep,
    &sol;&ast; implementation-defined &ast;&sol; ToU&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;ToRep, rep&gt; &amp;&amp; detail&colon;&colon;SaneScaling&lt;unit, ToU&lcub;&rcub;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
force&lowbar;in(ToU) const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; U&gt;
requires detail&colon;&colon;SaneScaling&lt;unit, U&lcub;&rcub;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01-rep[rep]
force&lowbar;numerical&lowbar;value&lowbar;in(U) const noexcept;
----

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] ToRep&gt;
requires detail&colon;&colon;ValuePreservingConstruction&lt;ToRep, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
link:#mp_units-quantity-01-in-06[in]() const;
----

[.small]#link:#mp_units-quantity-01-in-06[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; ToU&gt;
requires detail&colon;&colon;ValuePreservingScaling&lt;unit, ToU&lcub;&rcub;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
link:#mp_units-quantity-01-in-01[in](ToU) const;
----

[.small]#link:#mp_units-quantity-01-in-01[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] ToRep,
    &sol;&ast; implementation-defined &ast;&sol; ToU&gt;
requires detail&colon;&colon;ValuePreservingConstruction&lt;ToRep, rep&gt; &amp;&amp;
             detail&colon;&colon;ValuePreservingConversion&lt;unit, rep, ToU&lcub;&rcub;, ToRep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
link:#mp_units-quantity-01-in-02[in](ToU) const;
----

[.small]#link:#mp_units-quantity-01-in-02[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] ToRep&gt;
requires detail&colon;&colon;ValuePreservingConstruction&lt;ToRep, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
in() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; ToU&gt;
requires detail&colon;&colon;ValuePreservingScaling&lt;unit, ToU&lcub;&rcub;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
in(ToU) const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] ToRep,
    &sol;&ast; implementation-defined &ast;&sol; ToU&gt;
requires detail&colon;&colon;ValuePreservingConstruction&lt;ToRep, rep&gt; &amp;&amp;
             detail&colon;&colon;ValuePreservingConversion&lt;unit, rep, ToU&lcub;&rcub;, ToRep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
in(ToU) const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; U&gt;
requires detail&colon;&colon;ValuePreservingScaling&lt;unit, U&lcub;&rcub;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01-rep[rep]
numerical&lowbar;value&lowbar;in(U) const noexcept;
----

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Unit[Unit] U&gt;
requires (equivalent(U&lcub;&rcub;, unit))
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01-rep[rep]&
link:#mp_units-quantity-01-numerical_value_ref_in-03[numerical&lowbar;value&lowbar;ref&lowbar;in](U) &amp; noexcept;
----

[.small]#link:#mp_units-quantity-01-numerical_value_ref_in-03[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Unit[Unit] U&gt;
requires (equivalent(U&lcub;&rcub;, unit))
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01-rep[rep] const&
link:#mp_units-quantity-01-numerical_value_ref_in-06[numerical&lowbar;value&lowbar;ref&lowbar;in](U) const &amp; noexcept;
----

[.small]#link:#mp_units-quantity-01-numerical_value_ref_in-06[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Unit[Unit] U&gt;
requires (equivalent(U&lcub;&rcub;, unit))
constexpr
link:#mp_units-quantity-01-rep[rep] const&&
link:#mp_units-quantity-01-numerical_value_ref_in-08[numerical&lowbar;value&lowbar;ref&lowbar;in](U) const &amp;&amp; noexcept = delete;
----

[.small]#link:#mp_units-quantity-01-numerical_value_ref_in-08[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Unit[Unit] U&gt;
requires (equivalent(U&lcub;&rcub;, unit))
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01-rep[rep]&
numerical&lowbar;value&lowbar;ref&lowbar;in(U) &amp; noexcept;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Unit[Unit] U&gt;
requires (equivalent(U&lcub;&rcub;, unit))
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01-rep[rep] const&
numerical&lowbar;value&lowbar;ref&lowbar;in(U) const &amp; noexcept;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Unit[Unit] U&gt;
requires (equivalent(U&lcub;&rcub;, unit))
constexpr
link:#mp_units-quantity-01-rep[rep] const&&
numerical&lowbar;value&lowbar;ref&lowbar;in(U) const &amp;&amp; noexcept = delete;
----

Modulus assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R2,
    typename Rep2&gt;
requires (!treat&lowbar;as&lowbar;floating&lowbar;point&lt;rep&gt;) &amp;&amp; (implicitly&lowbar;convertible(get&lowbar;quantity&lowbar;spec(R2), quantity&lowbar;spec)) &amp;&amp;
            detail&colon;&colon;ValuePreservingConversion&lt;get&lowbar;unit(R2), Rep2, unit, rep&gt; &amp;&amp; requires(rep&amp; a, const Rep2 b) &lcub;
              &lcub; a %&equals; b &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;rep&amp;&gt;&semi;
            &rcub;
constexpr
link:#mp_units-quantity-01[quantity]&
operator%&equals;(link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& other) &amp;;
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The right operand
|===

Multiplication assignment operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

Multiplication assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; Q2&gt;
requires detail&colon;&colon;ScalarValuePreservingTo&lt;typename Q2&colon;&colon;rep, rep&gt; &amp;&amp; requires(rep&amp; a, const Q2&colon;&colon;rep b) &lcub;
      &lcub; a &ast;&equals; b &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;rep&amp;&gt;&semi;
    &rcub;
constexpr
link:#mp_units-quantity-01[quantity]&
link:#mp_units-quantity-01-operator_star_eq-07[operator&ast;&equals;](Q2 const& other) &amp;;
----

[.small]#link:#mp_units-quantity-01-operator_star_eq-07[_» more&period;&period;&period;_]#

Multiplication assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; Value&gt;
requires requires(rep&amp; a, const Value b) &lcub;
      &lcub; a &ast;&equals; b &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;rep&amp;&gt;&semi;
    &rcub;
constexpr
link:#mp_units-quantity-01[quantity]&
link:#mp_units-quantity-01-operator_star_eq-0d[operator&ast;&equals;](Value const& val) &amp;;
----

[.small]#link:#mp_units-quantity-01-operator_star_eq-0d[_» more&period;&period;&period;_]#

Multiplication assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; Q2&gt;
requires detail&colon;&colon;ScalarValuePreservingTo&lt;typename Q2&colon;&colon;rep, rep&gt; &amp;&amp; requires(rep&amp; a, const Q2&colon;&colon;rep b) &lcub;
      &lcub; a &ast;&equals; b &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;rep&amp;&gt;&semi;
    &rcub;
constexpr
link:#mp_units-quantity-01[quantity]&
operator&ast;&equals;(Q2 const& other) &amp;;
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The right operand
|===

Multiplication assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; Value&gt;
requires requires(rep&amp; a, const Value b) &lcub;
      &lcub; a &ast;&equals; b &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;rep&amp;&gt;&semi;
    &rcub;
constexpr
link:#mp_units-quantity-01[quantity]&
operator&ast;&equals;(Value const& val) &amp;;
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *val*
| The right operand
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
operator&plus;() const
requires requires(const rep v) &lcub;
      &lcub; &plus;v &rcub; &hyphen;&gt; std&colon;&colon;common&lowbar;with&lt;rep&gt;&semi;
    &rcub;;
----

Increment operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

Increment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mp_units-quantity-01[quantity]&
link:#mp_units-quantity-01-operator_inc-0f[operator&plus;&plus;]() &amp;
requires requires(rep&amp; v) &lcub;
      &lcub; &plus;&plus;v &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;rep&amp;&gt;&semi;
    &rcub;;
----

[.small]#link:#mp_units-quantity-01-operator_inc-0f[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
link:#mp_units-quantity-01-operator_inc-02[operator&plus;&plus;](int)
requires requires(rep&amp; v) &lcub;
      &lcub; v&plus;&plus; &rcub; &hyphen;&gt; std&colon;&colon;common&lowbar;with&lt;rep&gt;&semi;
    &rcub;;
----

[.small]#link:#mp_units-quantity-01-operator_inc-02[_» more&period;&period;&period;_]#

Increment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mp_units-quantity-01[quantity]&
operator&plus;&plus;() &amp;
requires requires(rep&amp; v) &lcub;
      &lcub; &plus;&plus;v &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;rep&amp;&gt;&semi;
    &rcub;;
----

== Return Value

Reference to the current object

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
operator&plus;&plus;(int)
requires requires(rep&amp; v) &lcub;
      &lcub; v&plus;&plus; &rcub; &hyphen;&gt; std&colon;&colon;common&lowbar;with&lt;rep&gt;&semi;
    &rcub;;
----

Addition assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R2,
    typename Rep2&gt;
requires (implicitly&lowbar;convertible(get&lowbar;quantity&lowbar;spec(R2), quantity&lowbar;spec)) &amp;&amp;
            detail&colon;&colon;ValuePreservingConversion&lt;get&lowbar;unit(R2), Rep2, unit, rep&gt; &amp;&amp; requires(rep&amp; a, const Rep2 b) &lcub;
              &lcub; a &plus;&equals; b &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;rep&amp;&gt;&semi;
            &rcub;
constexpr
link:#mp_units-quantity-01[quantity]&
operator&plus;&equals;(link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& other) &amp;;
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The right operand
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
operator&hyphen;() const
requires requires(const rep v) &lcub;
      &lcub; &hyphen;v &rcub; &hyphen;&gt; std&colon;&colon;common&lowbar;with&lt;rep&gt;&semi;
    &rcub;;
----

Decrement operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

Decrement operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mp_units-quantity-01[quantity]&
link:#mp_units-quantity-01-operator_dec-05[operator&hyphen;&hyphen;]() &amp;
requires requires(rep&amp; v) &lcub;
      &lcub; &hyphen;&hyphen;v &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;rep&amp;&gt;&semi;
    &rcub;;
----

[.small]#link:#mp_units-quantity-01-operator_dec-05[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
link:#mp_units-quantity-01-operator_dec-0d[operator&hyphen;&hyphen;](int)
requires requires(rep&amp; v) &lcub;
      &lcub; v&hyphen;&hyphen; &rcub; &hyphen;&gt; std&colon;&colon;common&lowbar;with&lt;rep&gt;&semi;
    &rcub;;
----

[.small]#link:#mp_units-quantity-01-operator_dec-0d[_» more&period;&period;&period;_]#

Decrement operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mp_units-quantity-01[quantity]&
operator&hyphen;&hyphen;() &amp;
requires requires(rep&amp; v) &lcub;
      &lcub; &hyphen;&hyphen;v &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;rep&amp;&gt;&semi;
    &rcub;;
----

== Return Value

Reference to the current object

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
operator&hyphen;&hyphen;(int)
requires requires(rep&amp; v) &lcub;
      &lcub; v&hyphen;&hyphen; &rcub; &hyphen;&gt; std&colon;&colon;common&lowbar;with&lt;rep&gt;&semi;
    &rcub;;
----

Subtraction assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R2,
    typename Rep2&gt;
requires (implicitly&lowbar;convertible(get&lowbar;quantity&lowbar;spec(R2), quantity&lowbar;spec)) &amp;&amp;
            detail&colon;&colon;ValuePreservingConversion&lt;get&lowbar;unit(R2), Rep2, unit, rep&gt; &amp;&amp; requires(rep&amp; a, const Rep2 b) &lcub;
              &lcub; a &hyphen;&equals; b &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;rep&amp;&gt;&semi;
            &rcub;
constexpr
link:#mp_units-quantity-01[quantity]&
operator&hyphen;&equals;(link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& other) &amp;;
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The right operand
|===

Division assignment operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

Division assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; Q2&gt;
requires detail&colon;&colon;ScalarValuePreservingTo&lt;typename Q2&colon;&colon;rep, rep&gt; &amp;&amp; requires(rep&amp; a, const Q2&colon;&colon;rep b) &lcub;
      &lcub; a &sol;&equals; b &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;rep&amp;&gt;&semi;
    &rcub;
constexpr
link:#mp_units-quantity-01[quantity]&
link:#mp_units-quantity-01-operator_slash_eq-09[operator&sol;&equals;](Q2 const& rhs) &amp;;
----

[.small]#link:#mp_units-quantity-01-operator_slash_eq-09[_» more&period;&period;&period;_]#

Division assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; Value&gt;
requires requires(rep&amp; a, const Value b) &lcub;
      &lcub; a &sol;&equals; b &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;rep&amp;&gt;&semi;
    &rcub;
constexpr
link:#mp_units-quantity-01[quantity]&
link:#mp_units-quantity-01-operator_slash_eq-0e[operator&sol;&equals;](Value const& val) &amp;;
----

[.small]#link:#mp_units-quantity-01-operator_slash_eq-0e[_» more&period;&period;&period;_]#

Division assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; Q2&gt;
requires detail&colon;&colon;ScalarValuePreservingTo&lt;typename Q2&colon;&colon;rep, rep&gt; &amp;&amp; requires(rep&amp; a, const Q2&colon;&colon;rep b) &lcub;
      &lcub; a &sol;&equals; b &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;rep&amp;&gt;&semi;
    &rcub;
constexpr
link:#mp_units-quantity-01[quantity]&
operator&sol;&equals;(Q2 const& rhs) &amp;;
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *rhs*
| The right operand
|===

Division assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; Value&gt;
requires requires(rep&amp; a, const Value b) &lcub;
      &lcub; a &sol;&equals; b &rcub; &hyphen;&gt; std&colon;&colon;same&lowbar;as&lt;rep&amp;&gt;&semi;
    &rcub;
constexpr
link:#mp_units-quantity-01[quantity]&
operator&sol;&equals;(Value const& val) &amp;;
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *val*
| The right operand
|===

Conversion operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

Conversion to `Q&lowbar;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Q&lowbar;,
    link:#mp_units-QuantityLike[QuantityLike] Q = std::remove&lowbar;cvref&lowbar;t&lt;Q&lowbar;&gt;&gt;
requires detail&colon;&colon;QuantityConstructibleFrom&lt;detail&colon;&colon;quantity&lowbar;like&lowbar;type&lt;Q&gt;, quantity&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
explicit(quantity&lowbar;like&lowbar;traits&lt;Q&gt;&colon;&colon;explicit&lowbar;export &verbar;&verbar; !std&colon;&colon;convertible&lowbar;to&lt;quantity&lt;R, Rep&gt;, detail&colon;&colon;quantity&lowbar;like&lowbar;type&lt;Q&gt;&gt;)
operator Q&lowbar;() const noexcept(noexcept(quantity&lowbar;like&lowbar;traits&lt;Q&gt;&colon;&colon;from&lowbar;numerical&lowbar;value(this&hyphen;&gt;numerical&lowbar;value&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;)) &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;rep&gt;);
----

[.small]#link:#mp_units-quantity-01-2conversion-00[_» more&period;&period;&period;_]#

Conversion to `V&lowbar;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename V&lowbar;,
    std::constructible&lowbar;from&lt;rep&gt; Value = std::remove&lowbar;cvref&lowbar;t&lt;V&lowbar;&gt;&gt;
requires detail&colon;&colon;DimensionlessOne&lt;reference&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
explicit
operator V&lowbar;() const &amp; noexcept;
----

[.small]#link:#mp_units-quantity-01-2conversion-0f[_» more&period;&period;&period;_]#

Conversion to `Q&lowbar;`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Q&lowbar;,
    link:#mp_units-QuantityLike[QuantityLike] Q = std::remove&lowbar;cvref&lowbar;t&lt;Q&lowbar;&gt;&gt;
requires detail&colon;&colon;QuantityConstructibleFrom&lt;detail&colon;&colon;quantity&lowbar;like&lowbar;type&lt;Q&gt;, quantity&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
explicit(quantity&lowbar;like&lowbar;traits&lt;Q&gt;&colon;&colon;explicit&lowbar;export &verbar;&verbar; !std&colon;&colon;convertible&lowbar;to&lt;quantity&lt;R, Rep&gt;, detail&colon;&colon;quantity&lowbar;like&lowbar;type&lt;Q&gt;&gt;)
operator Q&lowbar;() const noexcept(noexcept(quantity&lowbar;like&lowbar;traits&lt;Q&gt;&colon;&colon;from&lowbar;numerical&lowbar;value(this&hyphen;&gt;numerical&lowbar;value&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;)) &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;rep&gt;);
----

== Return Value

The object converted to `Q&lowbar;`

Conversion to `V&lowbar;`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename V&lowbar;,
    std::constructible&lowbar;from&lt;rep&gt; Value = std::remove&lowbar;cvref&lowbar;t&lt;V&lowbar;&gt;&gt;
requires detail&colon;&colon;DimensionlessOne&lt;reference&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
explicit
operator V&lowbar;() const &amp; noexcept;
----

== Return Value

The object converted to `V&lowbar;`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
static
link:#mp_units-quantity-01[quantity]
max() noexcept
requires requires &lcub; representation&lowbar;values&lt;rep&gt;&colon;&colon;max()&semi; &rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
static
link:#mp_units-quantity-01[quantity]
min() noexcept
requires requires &lcub; representation&lowbar;values&lt;rep&gt;&colon;&colon;min()&semi; &rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
static
link:#mp_units-quantity-01[quantity]
zero() noexcept
requires requires &lcub; representation&lowbar;values&lt;rep&gt;&colon;&colon;zero()&semi; &rcub;;
----

needs to be public for a structural type

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
Rep numerical&lowbar;value&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-Dimension[Dimension] auto dimension = quantity&lowbar;spec&period;dimension;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-QuantitySpec[QuantitySpec] auto quantity&lowbar;spec = get&lowbar;quantity&lowbar;spec(reference);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-Reference[Reference] auto reference = R;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-Unit[Unit] auto unit = get&lowbar;unit(reference);
----

Provides support for external quantity&hyphen;like types

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;customization&lowbar;points&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
struct quantity&lowbar;like&lowbar;traits;
----

== Description

The type trait should provide the `reference` object, a type alias `rep,` and static member functions `to&lowbar;numerical&lowbar;value(T)` that returns the raw value of the quantity and `from&lowbar;numerical&lowbar;value(rep)` that returns `T` from `rep&period;`

If the following expression is `true,` the specified conversion will be explicit&colon; &hyphen; `explicit&lowbar;import` for the conversion from `T` to a `quantity` type, &hyphen; `explicit&lowbar;export` for the conversion from a `quantity` type to `T&period;`

Usage example can be found in `mp&hyphen;units&sol;systems&sol;si&sol;chrono&period;h` header file&period;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *T*
| the type to provide support for
|===

A quantity point

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Reference[Reference] auto R,
    link:#mp_units-PointOriginFor[PointOriginFor&lt;get&lowbar;quantity&lowbar;spec(R)&gt;] auto PO,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;get&lowbar;quantity&lowbar;spec(R)&gt;] Rep&gt;
class quantity&lowbar;point;
----

== Types

[cols=1]
|===
| Name
| link:#mp_units-quantity_point-08-quantity_type[`quantity&lowbar;type`] 
| link:#mp_units-quantity_point-08-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-quantity_point-08-2constructor-075[`quantity&lowbar;point`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-quantity_point-08-2destructor[`&#126;quantity&lowbar;point`] [.small]#[destructor]#
| Destructor
| link:#mp_units-quantity_point-08-operator_assign-04[`operator&equals;`] 
| Assignment operators
| link:#mp_units-quantity_point-08-force_in-03e[`force&lowbar;in`] 
| 
| link:#mp_units-quantity_point-08-in-0ac[`in`] 
| 
| link:#mp_units-quantity_point-08-operator_inc-0d[`operator&plus;&plus;`] 
| Increment operators
| link:#mp_units-quantity_point-08-operator_plus_eq[`operator&plus;&equals;`] 
| Addition assignment operator
| link:#mp_units-quantity_point-08-operator_dec-0f[`operator&hyphen;&hyphen;`] 
| Decrement operators
| link:#mp_units-quantity_point-08-operator_minus_eq[`operator&hyphen;&equals;`] 
| Subtraction assignment operator
| link:#mp_units-quantity_point-08-point_for[`point&lowbar;for`] 
| 
| link:#mp_units-quantity_point-08-quantity_from-00[`quantity&lowbar;from`] 
| 
| link:#mp_units-quantity_point-08-quantity_from_zero[`quantity&lowbar;from&lowbar;zero`] 
| 
| link:#mp_units-quantity_point-08-quantity_ref_from-05[`quantity&lowbar;ref&lowbar;from`] 
| 
| link:#mp_units-quantity_point-08-2conversion-046[`operator `] 
| Conversion operators
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mp_units-quantity_point-08-max[`max`] 
| link:#mp_units-quantity_point-08-min[`min`] 
|===

== Data Members

[cols=1]
|===
| Name
| link:#mp_units-quantity_point-08-quantity_from_origin_is_an_implementation_detail_[`quantity&lowbar;from&lowbar;origin&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;`] 
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mp_units-quantity_point-08-absolute_point_origin[`absolute&lowbar;point&lowbar;origin`] 
| link:#mp_units-quantity_point-08-dimension[`dimension`] 
| link:#mp_units-quantity_point-08-point_origin[`point&lowbar;origin`] 
| link:#mp_units-quantity_point-08-quantity_spec[`quantity&lowbar;spec`] 
| link:#mp_units-quantity_point-08-reference[`reference`] 
| link:#mp_units-quantity_point-08-unit[`unit`] 
|===

== Friends

[cols=2]
|===
| Name
| Description
| `link:#mp_units-operator_3way-0d2[mp&lowbar;units::operator&lt;&equals;&gt;]`
| Three&hyphen;way comparison operator
| `link:#mp_units-operator_eq-011[mp&lowbar;units::operator&equals;&equals;]`
| Equality operator
| `link:#mp_units-operator_minus-075[mp&lowbar;units::operator&hyphen;]`
| 
| `link:#mp_units-operator_minus-00[mp&lowbar;units::operator&hyphen;]`
| 
| `link:#mp_units-operator_minus-06[mp&lowbar;units::operator&hyphen;]`
| 
| `link:#mp_units-operator_minus-05[mp&lowbar;units::operator&hyphen;]`
| 
| `link:#mp_units-operator_plus-00[mp&lowbar;units::operator&plus;]`
| 
| `link:#mp_units-operator_plus-0a5[mp&lowbar;units::operator&plus;]`
| 
|===

== Non-Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-isfinite-0b[`isfinite`]
| Determines if a quantity point is finite&period;
| link:#mp_units-isinf-04[`isinf`]
| Determines if a quantity point is infinite&period;
| link:#mp_units-isnan-082[`isnan`]
| Determines if a quantity point is a nan&period;
| link:#mp_units-lerp[`lerp`]
| Linear interpolation or extrapolation
| link:#mp_units-midpoint[`midpoint`]
| Computes the midpoint of two points
| link:#mp_units-value_cast-021[`value&lowbar;cast`]
| Explicit cast of a quantity point&apos;s representation type
|===

== Description

An absolute quantity measured from an origin&period;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *R*
| a reference of the quantity point providing all information about quantity properties
| *PO*
| a type that represents the origin point from which the quantity point is measured from
| *Rep*
| a type to be used to represent values of a quantity point
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using quantity&lowbar;type = link:#mp_units-quantity-01[quantity&lt;reference, Rep&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-quantity_point-08-2constructor-07e[quantity&lowbar;point]() = default;
----

[.small]#link:#mp_units-quantity_point-08-2constructor-07e[_» more&period;&period;&period;_]#

Copy constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-quantity_point-08-2constructor-04[quantity&lowbar;point](link:#mp_units-quantity_point-08[quantity&lowbar;point] const& other) = default;
----

[.small]#link:#mp_units-quantity_point-08-2constructor-04[_» more&period;&period;&period;_]#

Move constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-quantity_point-08-2constructor-0d[quantity&lowbar;point](link:#mp_units-quantity_point-08[quantity&lowbar;point]&& other) = default;
----

[.small]#link:#mp_units-quantity_point-08-2constructor-0d[_» more&period;&period;&period;_]#

Construct from `QP`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-QuantityPointLike[QuantityPointLike] QP&gt;
requires (quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;point&lowbar;origin &equals;&equals; point&lowbar;origin) &amp;&amp;
            std&colon;&colon;constructible&lowbar;from&lt;quantity&lowbar;type, quantity&lt;quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;reference,
                                                            typename quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;rep&gt;&gt;
constexpr
explicit(quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;explicit&lowbar;import &verbar;&verbar; !std&colon;&colon;convertible&lowbar;to&lt;quantity&lt;quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;reference, typename quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;rep&gt;, quantity&lowbar;type&gt;)
link:#mp_units-quantity_point-08-2constructor-002[quantity&lowbar;point](QP const& qp);
----

[.small]#link:#mp_units-quantity_point-08-2constructor-002[_» more&period;&period;&period;_]#

Construct from `QP`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-QuantityPointOf[QuantityPointOf&lt;absolute&lowbar;point&lowbar;origin&gt;] QP&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;quantity&lowbar;type, typename QP&colon;&colon;quantity&lowbar;type&gt;
constexpr
explicit(!std&colon;&colon;convertible&lowbar;to&lt;typename QP&colon;&colon;quantity&lowbar;type, quantity&lowbar;type&gt;)
link:#mp_units-quantity_point-08-2constructor-02[quantity&lowbar;point](QP const& qp);
----

[.small]#link:#mp_units-quantity_point-08-2constructor-02[_» more&period;&period;&period;_]#

Construct from `FwdQ`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdQ,
    link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;quantity&lowbar;type, FwdQ&gt; &amp;&amp; (point&lowbar;origin &equals;&equals; default&lowbar;point&lowbar;origin(R))
constexpr
explicit
link:#mp_units-quantity_point-08-2constructor-009[quantity&lowbar;point](FwdQ&& q);
----

[.small]#link:#mp_units-quantity_point-08-2constructor-009[_» more&period;&period;&period;_]#

Constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdQ,
    link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;quantity&lowbar;type, FwdQ&gt;
constexpr
link:#mp_units-quantity_point-08-2constructor-07b[quantity&lowbar;point](
    FwdQ&& q,
    decltype(PO));
----

[.small]#link:#mp_units-quantity_point-08-2constructor-07b[_» more&period;&period;&period;_]#

Constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdQ,
    link:#mp_units-PointOrigin[PointOrigin] PO2,
    link:#mp_units-QuantityOf[QuantityOf&lt;PO2&colon;&colon;&lowbar;quantity&lowbar;spec&lowbar;&gt;] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;quantity&lowbar;type, FwdQ&gt; &amp;&amp; detail&colon;&colon;SameAbsolutePointOriginAs&lt;PO2, PO&gt;
constexpr
link:#mp_units-quantity_point-08-2constructor-05[quantity&lowbar;point](
    FwdQ&& q,
    PO2);
----

[.small]#link:#mp_units-quantity_point-08-2constructor-05[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
quantity&lowbar;point() = default;
----

Copy constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
quantity&lowbar;point(link:#mp_units-quantity_point-08[quantity&lowbar;point] const& other) = default;
----

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to copy construct from
|===

Move constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
quantity&lowbar;point(link:#mp_units-quantity_point-08[quantity&lowbar;point]&& other) = default;
----

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to move construct from
|===

Construct from `QP`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-QuantityPointLike[QuantityPointLike] QP&gt;
requires (quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;point&lowbar;origin &equals;&equals; point&lowbar;origin) &amp;&amp;
            std&colon;&colon;constructible&lowbar;from&lt;quantity&lowbar;type, quantity&lt;quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;reference,
                                                            typename quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;rep&gt;&gt;
constexpr
explicit(quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;explicit&lowbar;import &verbar;&verbar; !std&colon;&colon;convertible&lowbar;to&lt;quantity&lt;quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;reference, typename quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;rep&gt;, quantity&lowbar;type&gt;)
quantity&lowbar;point(QP const& qp);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *qp*
| The object to copy construct from
|===

Construct from `QP`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-QuantityPointOf[QuantityPointOf&lt;absolute&lowbar;point&lowbar;origin&gt;] QP&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;quantity&lowbar;type, typename QP&colon;&colon;quantity&lowbar;type&gt;
constexpr
explicit(!std&colon;&colon;convertible&lowbar;to&lt;typename QP&colon;&colon;quantity&lowbar;type, quantity&lowbar;type&gt;)
quantity&lowbar;point(QP const& qp);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *qp*
| The object to copy construct from
|===

Construct from `FwdQ`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdQ,
    link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;quantity&lowbar;type, FwdQ&gt; &amp;&amp; (point&lowbar;origin &equals;&equals; default&lowbar;point&lowbar;origin(R))
constexpr
explicit
quantity&lowbar;point(FwdQ&& q);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *q*
| The object to move construct from
|===

Constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdQ,
    link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;quantity&lowbar;type, FwdQ&gt;
constexpr
quantity&lowbar;point(
    FwdQ&& q,
    decltype(PO));
----

== Parameters

[cols=2]
|===
| Name
| Description
| *q*
| The object to move construct from
|===

Constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdQ,
    link:#mp_units-PointOrigin[PointOrigin] PO2,
    link:#mp_units-QuantityOf[QuantityOf&lt;PO2&colon;&colon;&lowbar;quantity&lowbar;spec&lowbar;&gt;] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;quantity&lowbar;type, FwdQ&gt; &amp;&amp; detail&colon;&colon;SameAbsolutePointOriginAs&lt;PO2, PO&gt;
constexpr
quantity&lowbar;point(
    FwdQ&& q,
    PO2);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *q*
| The object to move construct from
|===

Destructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&#126;quantity&lowbar;point() = default;
----

Assignment operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

Copy assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-quantity_point-08[quantity&lowbar;point]&
link:#mp_units-quantity_point-08-operator_assign-03[operator&equals;](link:#mp_units-quantity_point-08[quantity&lowbar;point] const& other) = default;
----

[.small]#link:#mp_units-quantity_point-08-operator_assign-03[_» more&period;&period;&period;_]#

Move assignment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-quantity_point-08[quantity&lowbar;point]&
link:#mp_units-quantity_point-08-operator_assign-08[operator&equals;](link:#mp_units-quantity_point-08[quantity&lowbar;point]&& other) = default;
----

[.small]#link:#mp_units-quantity_point-08-operator_assign-08[_» more&period;&period;&period;_]#

Copy assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-quantity_point-08[quantity&lowbar;point]&
operator&equals;(link:#mp_units-quantity_point-08[quantity&lowbar;point] const& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to copy assign from
|===

Move assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-quantity_point-08[quantity&lowbar;point]&
operator&equals;(link:#mp_units-quantity_point-08[quantity&lowbar;point]&& other) = default;
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *other*
| The object to move assign from
|===

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] ToRep&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;ToRep, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPointOf[QuantityPointOf&lt;quantity&lowbar;spec&gt;] auto
link:#mp_units-quantity_point-08-force_in-0a[force&lowbar;in]() const;
----

[.small]#link:#mp_units-quantity_point-08-force_in-0a[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; ToU&gt;
requires detail&colon;&colon;SaneScaling&lt;unit, ToU&lcub;&rcub;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPointOf[QuantityPointOf&lt;quantity&lowbar;spec&gt;] auto
link:#mp_units-quantity_point-08-force_in-0b[force&lowbar;in](ToU) const;
----

[.small]#link:#mp_units-quantity_point-08-force_in-0b[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] ToRep,
    &sol;&ast; implementation-defined &ast;&sol; ToU&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;ToRep, rep&gt; &amp;&amp; detail&colon;&colon;SaneScaling&lt;unit, ToU&lcub;&rcub;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPointOf[QuantityPointOf&lt;quantity&lowbar;spec&gt;] auto
link:#mp_units-quantity_point-08-force_in-035[force&lowbar;in](ToU) const;
----

[.small]#link:#mp_units-quantity_point-08-force_in-035[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] ToRep&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;ToRep, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPointOf[QuantityPointOf&lt;quantity&lowbar;spec&gt;] auto
force&lowbar;in() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; ToU&gt;
requires detail&colon;&colon;SaneScaling&lt;unit, ToU&lcub;&rcub;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPointOf[QuantityPointOf&lt;quantity&lowbar;spec&gt;] auto
force&lowbar;in(ToU) const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] ToRep,
    &sol;&ast; implementation-defined &ast;&sol; ToU&gt;
requires std&colon;&colon;constructible&lowbar;from&lt;ToRep, rep&gt; &amp;&amp; detail&colon;&colon;SaneScaling&lt;unit, ToU&lcub;&rcub;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPointOf[QuantityPointOf&lt;quantity&lowbar;spec&gt;] auto
force&lowbar;in(ToU) const;
----

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] ToRep&gt;
requires detail&colon;&colon;ValuePreservingConstruction&lt;ToRep, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPointOf[QuantityPointOf&lt;quantity&lowbar;spec&gt;] auto
link:#mp_units-quantity_point-08-in-0d[in]() const;
----

[.small]#link:#mp_units-quantity_point-08-in-0d[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; ToU&gt;
requires detail&colon;&colon;ValuePreservingScaling&lt;unit, ToU&lcub;&rcub;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPointOf[QuantityPointOf&lt;quantity&lowbar;spec&gt;] auto
link:#mp_units-quantity_point-08-in-0c[in](ToU) const;
----

[.small]#link:#mp_units-quantity_point-08-in-0c[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] ToRep,
    &sol;&ast; implementation-defined &ast;&sol; ToU&gt;
requires detail&colon;&colon;ValuePreservingConstruction&lt;ToRep, rep&gt; &amp;&amp;
             detail&colon;&colon;ValuePreservingConversion&lt;unit, rep, ToU&lcub;&rcub;, ToRep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPointOf[QuantityPointOf&lt;quantity&lowbar;spec&gt;] auto
link:#mp_units-quantity_point-08-in-0a0[in](ToU) const;
----

[.small]#link:#mp_units-quantity_point-08-in-0a0[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] ToRep&gt;
requires detail&colon;&colon;ValuePreservingConstruction&lt;ToRep, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPointOf[QuantityPointOf&lt;quantity&lowbar;spec&gt;] auto
in() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; ToU&gt;
requires detail&colon;&colon;ValuePreservingScaling&lt;unit, ToU&lcub;&rcub;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPointOf[QuantityPointOf&lt;quantity&lowbar;spec&gt;] auto
in(ToU) const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] ToRep,
    &sol;&ast; implementation-defined &ast;&sol; ToU&gt;
requires detail&colon;&colon;ValuePreservingConstruction&lt;ToRep, rep&gt; &amp;&amp;
             detail&colon;&colon;ValuePreservingConversion&lt;unit, rep, ToU&lcub;&rcub;, ToRep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPointOf[QuantityPointOf&lt;quantity&lowbar;spec&gt;] auto
in(ToU) const;
----

Increment operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

Increment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mp_units-quantity_point-08[quantity&lowbar;point]&
link:#mp_units-quantity_point-08-operator_inc-08[operator&plus;&plus;]() &amp;
requires requires &lcub; &plus;&plus;quantity&lowbar;from&lowbar;origin&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;&semi; &rcub;;
----

[.small]#link:#mp_units-quantity_point-08-operator_inc-08[_» more&period;&period;&period;_]#

Increment operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity_point-08[quantity&lowbar;point]
link:#mp_units-quantity_point-08-operator_inc-03[operator&plus;&plus;](int)
requires requires &lcub; quantity&lowbar;from&lowbar;origin&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;&plus;&plus;&semi; &rcub;;
----

[.small]#link:#mp_units-quantity_point-08-operator_inc-03[_» more&period;&period;&period;_]#

Increment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mp_units-quantity_point-08[quantity&lowbar;point]&
operator&plus;&plus;() &amp;
requires requires &lcub; &plus;&plus;quantity&lowbar;from&lowbar;origin&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;&semi; &rcub;;
----

== Return Value

Reference to the current object

Increment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity_point-08[quantity&lowbar;point]
operator&plus;&plus;(int)
requires requires &lcub; quantity&lowbar;from&lowbar;origin&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;&plus;&plus;&semi; &rcub;;
----

== Return Value

Another instance of the object

Addition assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R2,
    typename Rep2&gt;
requires (implicitly&lowbar;convertible(get&lowbar;quantity&lowbar;spec(R2), quantity&lowbar;spec)) &amp;&amp;
            detail&colon;&colon;ValuePreservingConversion&lt;get&lowbar;unit(R2), Rep2, unit, rep&gt; &amp;&amp;
            requires(const quantity&lowbar;type q) &lcub; quantity&lowbar;from&lowbar;origin&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar; &plus;&equals; q&semi; &rcub;
constexpr
link:#mp_units-quantity_point-08[quantity&lowbar;point]&
operator&plus;&equals;(link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& q) &amp;;
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *q*
| The right operand
|===

Decrement operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

Decrement operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mp_units-quantity_point-08[quantity&lowbar;point]&
link:#mp_units-quantity_point-08-operator_dec-0d[operator&hyphen;&hyphen;]() &amp;
requires requires &lcub; &hyphen;&hyphen;quantity&lowbar;from&lowbar;origin&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;&semi; &rcub;;
----

[.small]#link:#mp_units-quantity_point-08-operator_dec-0d[_» more&period;&period;&period;_]#

Decrement operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity_point-08[quantity&lowbar;point]
link:#mp_units-quantity_point-08-operator_dec-03[operator&hyphen;&hyphen;](int)
requires requires &lcub; quantity&lowbar;from&lowbar;origin&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;&hyphen;&hyphen;&semi; &rcub;;
----

[.small]#link:#mp_units-quantity_point-08-operator_dec-03[_» more&period;&period;&period;_]#

Decrement operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mp_units-quantity_point-08[quantity&lowbar;point]&
operator&hyphen;&hyphen;() &amp;
requires requires &lcub; &hyphen;&hyphen;quantity&lowbar;from&lowbar;origin&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;&semi; &rcub;;
----

== Return Value

Reference to the current object

Decrement operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity_point-08[quantity&lowbar;point]
operator&hyphen;&hyphen;(int)
requires requires &lcub; quantity&lowbar;from&lowbar;origin&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;&hyphen;&hyphen;&semi; &rcub;;
----

== Return Value

Another instance of the object

Subtraction assignment operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R2,
    typename Rep2&gt;
requires (implicitly&lowbar;convertible(get&lowbar;quantity&lowbar;spec(R2), quantity&lowbar;spec)) &amp;&amp;
            detail&colon;&colon;ValuePreservingConversion&lt;get&lowbar;unit(R2), Rep2, unit, rep&gt; &amp;&amp;
            requires(const quantity&lowbar;type q) &lcub; quantity&lowbar;from&lowbar;origin&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar; &hyphen;&equals; q&semi; &rcub;
constexpr
link:#mp_units-quantity_point-08[quantity&lowbar;point]&
operator&hyphen;&equals;(link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& q) &amp;;
----

== Return Value

Reference to the current object

== Parameters

[cols=2]
|===
| Name
| Description
| *q*
| The right operand
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; NewPO&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPointOf[QuantityPointOf&lt;(NewPO&lcub;&rcub;)&gt;] auto
point&lowbar;for(NewPO new&lowbar;origin) const;
----

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-PointOrigin[PointOrigin] PO2&gt;
requires requires(const quantity&lowbar;point qp) &lcub; qp &hyphen; PO2&lcub;&rcub;&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-quantity_point-08-quantity_from-04[quantity&lowbar;from](PO2) const;
----

[.small]#link:#mp_units-quantity_point-08-quantity_from-04[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-QuantityPointOf[QuantityPointOf&lt;absolute&lowbar;point&lowbar;origin&gt;] QP&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-quantity_point-08-quantity_from-0f[quantity&lowbar;from](QP const& qp) const;
----

[.small]#link:#mp_units-quantity_point-08-quantity_from-0f[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-PointOrigin[PointOrigin] PO2&gt;
requires requires(const quantity&lowbar;point qp) &lcub; qp &hyphen; PO2&lcub;&rcub;&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
quantity&lowbar;from(PO2) const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-QuantityPointOf[QuantityPointOf&lt;absolute&lowbar;point&lowbar;origin&gt;] QP&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
quantity&lowbar;from(QP const& qp) const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
quantity&lowbar;from&lowbar;zero() const;
----

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-PointOrigin[PointOrigin] PO2&gt;
requires (PO2&lcub;&rcub; &equals;&equals; point&lowbar;origin)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity_point-08-quantity_type[quantity&lowbar;type]&
link:#mp_units-quantity_point-08-quantity_ref_from-04[quantity&lowbar;ref&lowbar;from](PO2) &amp; noexcept;
----

[.small]#link:#mp_units-quantity_point-08-quantity_ref_from-04[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-PointOrigin[PointOrigin] PO2&gt;
requires (PO2&lcub;&rcub; &equals;&equals; point&lowbar;origin)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity_point-08-quantity_type[quantity&lowbar;type] const&
link:#mp_units-quantity_point-08-quantity_ref_from-01[quantity&lowbar;ref&lowbar;from](PO2) const &amp; noexcept;
----

[.small]#link:#mp_units-quantity_point-08-quantity_ref_from-01[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-PointOrigin[PointOrigin] PO2&gt;
requires (PO2&lcub;&rcub; &equals;&equals; point&lowbar;origin)
constexpr
link:#mp_units-quantity_point-08-quantity_type[quantity&lowbar;type] const&&
link:#mp_units-quantity_point-08-quantity_ref_from-0c[quantity&lowbar;ref&lowbar;from](PO2) const &amp;&amp; noexcept = delete;
----

[.small]#link:#mp_units-quantity_point-08-quantity_ref_from-0c[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-PointOrigin[PointOrigin] PO2&gt;
requires (PO2&lcub;&rcub; &equals;&equals; point&lowbar;origin)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity_point-08-quantity_type[quantity&lowbar;type]&
quantity&lowbar;ref&lowbar;from(PO2) &amp; noexcept;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-PointOrigin[PointOrigin] PO2&gt;
requires (PO2&lcub;&rcub; &equals;&equals; point&lowbar;origin)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity_point-08-quantity_type[quantity&lowbar;type] const&
quantity&lowbar;ref&lowbar;from(PO2) const &amp; noexcept;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-PointOrigin[PointOrigin] PO2&gt;
requires (PO2&lcub;&rcub; &equals;&equals; point&lowbar;origin)
constexpr
link:#mp_units-quantity_point-08-quantity_type[quantity&lowbar;type] const&&
quantity&lowbar;ref&lowbar;from(PO2) const &amp;&amp; noexcept = delete;
----

Conversion operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

Conversion to `QP&lowbar;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename QP&lowbar;,
    link:#mp_units-QuantityPointLike[QuantityPointLike] QP = std::remove&lowbar;cvref&lowbar;t&lt;QP&lowbar;&gt;&gt;
requires (point&lowbar;origin &equals;&equals; quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;point&lowbar;origin) &amp;&amp;
            std&colon;&colon;convertible&lowbar;to&lt;quantity&lowbar;type, quantity&lt;quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;reference,
                                                        typename quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;rep&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
explicit(quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;explicit&lowbar;export &verbar;&verbar; !std&colon;&colon;convertible&lowbar;to&lt;quantity&lowbar;type, quantity&lt;quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;reference, typename quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;rep&gt;&gt;)
operator QP&lowbar;() const &amp; noexcept(noexcept(quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;from&lowbar;numerical&lowbar;value(this&hyphen;&gt;quantity&lowbar;from&lowbar;origin&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;&period;numerical&lowbar;value&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;)) &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;rep&gt;);
----

[.small]#link:#mp_units-quantity_point-08-2conversion-01[_» more&period;&period;&period;_]#

Conversion to `QP&lowbar;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename QP&lowbar;,
    link:#mp_units-QuantityPointLike[QuantityPointLike] QP = std::remove&lowbar;cvref&lowbar;t&lt;QP&lowbar;&gt;&gt;
requires (point&lowbar;origin &equals;&equals; quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;point&lowbar;origin) &amp;&amp;
            std&colon;&colon;convertible&lowbar;to&lt;quantity&lowbar;type, quantity&lt;quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;reference,
                                                        typename quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;rep&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
explicit(quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;explicit&lowbar;export &verbar;&verbar; !std&colon;&colon;convertible&lowbar;to&lt;quantity&lowbar;type, quantity&lt;quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;reference, typename quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;rep&gt;&gt;)
operator QP&lowbar;() &amp;&amp; noexcept(noexcept(quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;from&lowbar;numerical&lowbar;value(this&hyphen;&gt;quantity&lowbar;from&lowbar;origin&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;&period;numerical&lowbar;value&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;)) &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;rep&gt;);
----

[.small]#link:#mp_units-quantity_point-08-2conversion-044[_» more&period;&period;&period;_]#

Conversion to `QP&lowbar;`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename QP&lowbar;,
    link:#mp_units-QuantityPointLike[QuantityPointLike] QP = std::remove&lowbar;cvref&lowbar;t&lt;QP&lowbar;&gt;&gt;
requires (point&lowbar;origin &equals;&equals; quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;point&lowbar;origin) &amp;&amp;
            std&colon;&colon;convertible&lowbar;to&lt;quantity&lowbar;type, quantity&lt;quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;reference,
                                                        typename quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;rep&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
explicit(quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;explicit&lowbar;export &verbar;&verbar; !std&colon;&colon;convertible&lowbar;to&lt;quantity&lowbar;type, quantity&lt;quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;reference, typename quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;rep&gt;&gt;)
operator QP&lowbar;() const &amp; noexcept(noexcept(quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;from&lowbar;numerical&lowbar;value(this&hyphen;&gt;quantity&lowbar;from&lowbar;origin&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;&period;numerical&lowbar;value&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;)) &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;copy&lowbar;constructible&lowbar;v&lt;rep&gt;);
----

== Return Value

The object converted to `QP&lowbar;`

Conversion to `QP&lowbar;`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename QP&lowbar;,
    link:#mp_units-QuantityPointLike[QuantityPointLike] QP = std::remove&lowbar;cvref&lowbar;t&lt;QP&lowbar;&gt;&gt;
requires (point&lowbar;origin &equals;&equals; quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;point&lowbar;origin) &amp;&amp;
            std&colon;&colon;convertible&lowbar;to&lt;quantity&lowbar;type, quantity&lt;quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;reference,
                                                        typename quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;rep&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
explicit(quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;explicit&lowbar;export &verbar;&verbar; !std&colon;&colon;convertible&lowbar;to&lt;quantity&lowbar;type, quantity&lt;quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;reference, typename quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;rep&gt;&gt;)
operator QP&lowbar;() &amp;&amp; noexcept(noexcept(quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;from&lowbar;numerical&lowbar;value(this&hyphen;&gt;quantity&lowbar;from&lowbar;origin&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;&period;numerical&lowbar;value&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;)) &amp;&amp; std&colon;&colon;is&lowbar;nothrow&lowbar;move&lowbar;constructible&lowbar;v&lt;rep&gt;);
----

== Return Value

The object converted to `QP&lowbar;`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
static
link:#mp_units-quantity_point-08[quantity&lowbar;point]
max() noexcept
requires requires &lcub; quantity&lowbar;type&colon;&colon;max()&semi; &rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
static
link:#mp_units-quantity_point-08[quantity&lowbar;point]
min() noexcept
requires requires &lcub; quantity&lowbar;type&colon;&colon;min()&semi; &rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-quantity_point-08-quantity_type[quantity&lowbar;type] quantity&lowbar;from&lowbar;origin&lowbar;is&lowbar;an&lowbar;implementation&lowbar;detail&lowbar;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-PointOrigin[PointOrigin] auto absolute&lowbar;point&lowbar;origin = detail&colon;&colon;get&lowbar;absolute&lowbar;point&lowbar;origin(PO);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-Dimension[Dimension] auto dimension = quantity&lowbar;spec&period;dimension;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-PointOrigin[PointOrigin] auto point&lowbar;origin = PO;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-QuantitySpec[QuantitySpec] auto quantity&lowbar;spec = get&lowbar;quantity&lowbar;spec(reference);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-Reference[Reference] auto reference = R;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-Unit[Unit] auto unit = get&lowbar;unit(reference);
----

Provides support for external quantity point&hyphen;like types

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;customization&lowbar;points&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
struct quantity&lowbar;point&lowbar;like&lowbar;traits;
----

== Description

The type trait should provide nested `reference` and `origin` objects, a type alias `rep,` and static member functions `to&lowbar;numerical&lowbar;value(T)` that returns the raw value of the the quantity being the offset of the point from the origin and `from&lowbar;numerical&lowbar;value(rep)` that returns `T` formed this raw value&period;

If the following expression is `true,` the specified conversion will be explicit&colon; &hyphen; `explicit&lowbar;import` for the conversion from `T` to a `quantity&lowbar;point` type, &hyphen; `explicit&lowbar;export` for the conversion from a `quantity&lowbar;point` type to `T&period;`

Usage example can be found in `mp&hyphen;units&sol;systems&sol;si&sol;chrono&period;h` header file&period;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *T*
| the type to provide support for
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;auto&period;&period;&period;&gt;
struct quantity&lowbar;spec;
----

== Derived Classes

[cols=2]
|===
| Name
| Description
| link:#mp_units-dimensionless-0f[`dimensionless`]
| Quantity of dimension one
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    &sol;&ast; implementation-defined &ast;&sol; auto Dim,
    &sol;&ast; implementation-defined &ast;&sol; auto Args&period;&period;&period;&gt;
struct link:#mp_units-quantity_spec-09[quantity&lowbar;spec]&lt;QS, Args&period;&period;&period;&gt;
    : &sol;&ast; implementation-defined &ast;&sol;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `&sol;&ast; implementation-defined &ast;&sol;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-quantity_spec-0a6-_base_type_[`&lowbar;base&lowbar;type&lowbar;`] 
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mp_units-quantity_spec-0a6-_equation_[`&lowbar;equation&lowbar;`] 
| link:#mp_units-quantity_spec-0a6-_parent_[`&lowbar;parent&lowbar;`] 
| link:#mp_units-quantity_spec-0a6-character[`character`] 
| link:#mp_units-quantity_spec-0a6-dimension[`dimension`] 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using &lowbar;base&lowbar;type&lowbar; = link:#mp_units-quantity_spec-0a6[quantity&lowbar;spec];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;equation&lowbar; = Eq;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;parent&lowbar; = QS;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-quantity_character[quantity&lowbar;character] character = detail&colon;&colon;quantity&lowbar;character&lowbar;init&lt;Args&period;&period;&period;&gt;(QS&period;character);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-Dimension[Dimension] auto dimension = &lowbar;parent&lowbar;&period;dimension;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    &sol;&ast; implementation-defined &ast;&sol; auto QS,
    &sol;&ast; implementation-defined &ast;&sol; auto Eq,
    &sol;&ast; implementation-defined &ast;&sol; auto Args&period;&period;&period;&gt;
requires (explicitly&lowbar;convertible(Eq, QS))
struct link:#mp_units-quantity_spec-09[quantity&lowbar;spec]&lt;QS, Eq, Args&period;&period;&period;&gt;
    : &sol;&ast; implementation-defined &ast;&sol;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `&sol;&ast; implementation-defined &ast;&sol;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-quantity_spec-0a0-_base_type_[`&lowbar;base&lowbar;type&lowbar;`] 
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mp_units-quantity_spec-0a0-_equation_[`&lowbar;equation&lowbar;`] 
| link:#mp_units-quantity_spec-0a0-_parent_[`&lowbar;parent&lowbar;`] 
| link:#mp_units-quantity_spec-0a0-character[`character`] 
| link:#mp_units-quantity_spec-0a0-dimension[`dimension`] 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using &lowbar;base&lowbar;type&lowbar; = link:#mp_units-quantity_spec-0a0[quantity&lowbar;spec];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;equation&lowbar; = Eq;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto &lowbar;parent&lowbar; = QS;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-quantity_character[quantity&lowbar;character] character = detail&colon;&colon;quantity&lowbar;character&lowbar;init&lt;Args&period;&period;&period;&gt;(Eq&period;character);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-Dimension[Dimension] auto dimension = &lowbar;parent&lowbar;&period;dimension;
----

Quantity reference type

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-QuantitySpec[QuantitySpec] Q,
    link:#mp_units-Unit[Unit] U&gt;
struct reference;
----

== Friends

[cols=2]
|===
| Name
| Description
| `link:#mp_units-cbrt-0e[mp&lowbar;units::cbrt]`
| 
| `link:#mp_units-sqrt-0f[mp&lowbar;units::sqrt]`
| 
| `link:#mp_units-pow-0b[mp&lowbar;units::pow]`
| Computes the value of a reference raised to the `Num&sol;Den` power
| `link:#mp_units-inverse-0b[mp&lowbar;units::inverse]`
| 
| `link:#mp_units-operator_slash-0d6[mp&lowbar;units::operator&sol;]`
| 
| `link:#mp_units-operator_slash-0e[mp&lowbar;units::operator&sol;]`
| 
| `link:#mp_units-operator_slash-0d3[mp&lowbar;units::operator&sol;]`
| 
| `link:#mp_units-operator_star-02b[mp&lowbar;units::operator&ast;]`
| 
| `link:#mp_units-operator_star-0f[mp&lowbar;units::operator&ast;]`
| 
| `link:#mp_units-operator_star-05[mp&lowbar;units::operator&ast;]`
| 
| `link:#mp_units-operator_eq-02[mp&lowbar;units::operator&equals;&equals;]`
| Equality operator
| `link:#mp_units-operator_eq-07[mp&lowbar;units::operator&equals;&equals;]`
| Equality operator
|===

== Description

Quantity reference describes all the properties of a quantity besides its representation type&period;

In most cases this class template is not explicitly instantiated by the user&period; It is implicitly instantiated by the library&apos;s framework while binding a quantity specification with a compatible unit&period;

[,cpp]
----
{.cpp}
 Reference auto kmph = isq::speed[km / h];
 QuantityOf<isq::speed[km / h]> auto speed = 90 * kmph;
----
The following syntaxes are not allowed&colon; `2 &sol; kmph`, `kmph &ast; 3`, `kmph &sol; 4`, `70 &ast; isq&colon;&colon;length&lsqb;km&rsqb; &sol; isq&colon;time&lsqb;h&rsqb;`&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-QuantityPoint[QuantityPoint] auto QP&gt;
struct relative&lowbar;point&lowbar;origin
    : &sol;&ast; implementation-defined &ast;&sol;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `&sol;&ast; implementation-defined &ast;&sol;`
| 
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mp_units-relative_point_origin-_absolute_point_origin_[`&lowbar;absolute&lowbar;point&lowbar;origin&lowbar;`] 
| link:#mp_units-relative_point_origin-_quantity_point_[`&lowbar;quantity&lowbar;point&lowbar;`] 
| link:#mp_units-relative_point_origin-_quantity_spec_[`&lowbar;quantity&lowbar;spec&lowbar;`] 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-PointOrigin[PointOrigin] auto &lowbar;absolute&lowbar;point&lowbar;origin&lowbar; = QP&period;absolute&lowbar;point&lowbar;origin;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-QuantityPoint[QuantityPoint] auto &lowbar;quantity&lowbar;point&lowbar; = QP;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
link:#mp_units-QuantitySpec[QuantitySpec] auto &lowbar;quantity&lowbar;spec&lowbar; = &lsqb;&rsqb;() &lcub;
    &sol;&sol; select the strongest of specs
    if constexpr (detail&colon;&colon;QuantityKindSpec&lt;MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(QP&period;quantity&lowbar;spec)&gt;)
      return QP&period;point&lowbar;origin&period;&lowbar;quantity&lowbar;spec&lowbar;&semi;
    else
      return QP&period;quantity&lowbar;spec&semi;
  &rcub;();
----

A type trait that defines zero, one, min, and max for a representation type

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;customization&lowbar;points&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Rep&gt;
struct representation&lowbar;values
    : std::chrono::duration&lowbar;values&lt;Rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::chrono::duration&lowbar;values&lt;Rep&gt;`
| 
|===

== Static Member Functions

[cols=1]
|===
| Name
| link:#mp_units-representation_values-one[`one`] 
|===

== Description

The zero, one, min, and max member functions in mp&lowbar;units&colon;&colon;quantity forward their work to these methods&period; This type can be specialized if the representation Rep requires a specific implementation to return these quantity objects&period;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *Rep*
| a representation type for which a type trait is defined
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;customization&lowbar;points&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
static
Rep
one() noexcept
requires std&colon;&colon;constructible&lowbar;from&lt;Rep, int&gt;;
----

Unit being a scaled version of another unit

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-UnitMagnitude[UnitMagnitude] auto M,
    link:#mp_units-Unit[Unit] U&gt;
requires (M !&equals; detail&colon;&colon;unit&lowbar;magnitude&lt;&gt;&lcub;&rcub; &amp;&amp; M !&equals; mag&lt;1&gt;)
struct scaled&lowbar;unit final
    : &sol;&ast; implementation-defined &ast;&sol;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `&sol;&ast; implementation-defined &ast;&sol;`
| 
|===

== Description

[NOTE]
====
User should not instantiate this type! It is not exported from the C&plus;&plus; module&period; The library will instantiate this type automatically based on the unit arithmetic equation provided by the user&period;

====

== Template Parameters

[cols=2]
|===
| Name
| Description
| *M*
| magnitude describing the scale factor
| *U*
| reference unit being scaled
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct student&lowbar;t&lowbar;distribution
    : std::student&lowbar;t&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::student&lowbar;t&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-student_t_distribution-0b-base[`base`] 
| link:#mp_units-student_t_distribution-0b-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-student_t_distribution-0b-2constructor-070[`student&lowbar;t&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-student_t_distribution-0b-max[`max`] 
| 
| link:#mp_units-student_t_distribution-0b-min[`min`] 
| 
| link:#mp_units-student_t_distribution-0b-operator_call[`operator()`] 
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using base = std::student&lowbar;t&lowbar;distribution&lt;rep&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Q::rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-student_t_distribution-0b-2constructor-07f[student&lowbar;t&lowbar;distribution]();
----

[.small]#link:#mp_units-student_t_distribution-0b-2constructor-07f[_» more&period;&period;&period;_]#

Construct from `rep`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
link:#mp_units-student_t_distribution-0b-2constructor-06[student&lowbar;t&lowbar;distribution](link:#mp_units-student_t_distribution-0b-rep[rep] const& n);
----

[.small]#link:#mp_units-student_t_distribution-0b-2constructor-06[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
student&lowbar;t&lowbar;distribution();
----

Construct from `rep`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
explicit
student&lowbar;t&lowbar;distribution(link:#mp_units-student_t_distribution-0b-rep[rep] const& n);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *n*
| The object to copy construct from
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;floating&lowbar;point&lt;typename Q&colon;&colon;rep&gt;
struct student&lowbar;t&lowbar;distribution
    : std::student&lowbar;t&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::student&lowbar;t&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

A symbol text representation

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::size&lowbar;t N,
    std::size&lowbar;t M&gt;
class symbol&lowbar;text;
----

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-symbol_text-032-2constructor-01[`symbol&lowbar;text`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-symbol_text-032-ascii[`ascii`] 
| 
| link:#mp_units-symbol_text-032-empty[`empty`] 
| 
| link:#mp_units-symbol_text-032-portable[`portable`] 
| 
| link:#mp_units-symbol_text-032-unicode[`unicode`] 
| 
| link:#mp_units-symbol_text-032-utf8[`utf8`] 
| 
|===

== Data Members

[cols=1]
|===
| Name
| link:#mp_units-symbol_text-032-portable_[`portable&lowbar;`] 
| link:#mp_units-symbol_text-032-utf8_[`utf8&lowbar;`] 
|===

== Friends

[cols=2]
|===
| Name
| Description
| `link:#mp_units-operator_eq-0a[mp&lowbar;units::operator&equals;&equals;]`
| Equality operator
| `link:#mp_units-operator_3way-0b[mp&lowbar;units::operator&lt;&equals;&gt;]`
| Three&hyphen;way comparison operator
| `link:#mp_units-operator_plus-0e1[mp&lowbar;units::operator&plus;]`
| Addition operator
|===

== Description

This class template is responsible for definition and handling of a symbol text representation&period; In the libary it is used to define symbols of units and prefixes&period; Each symbol can have two versions&colon; UTF&hyphen;8 and portable&period;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *N*
| The size of a UTF&hyphen;8 symbol
| *M*
| The size of the portable symbol
|===

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

Construct from `char`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit(false)
link:#mp_units-symbol_text-032-2constructor-05[symbol&lowbar;text](char ch);
----

[.small]#link:#mp_units-symbol_text-032-2constructor-05[_» more&period;&period;&period;_]#

Construct from `fixed&lowbar;string`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit(false)
link:#mp_units-symbol_text-032-2constructor-0f[symbol&lowbar;text](link:#mp_units-fixed_string[fixed&lowbar;string&lt;N&gt;] const& txt);
----

[.small]#link:#mp_units-symbol_text-032-2constructor-0f[_» more&period;&period;&period;_]#

Construct from `char`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
consteval
explicit(false)
link:#mp_units-symbol_text-032-2constructor-0a[symbol&lowbar;text](char const(& txt)[]);
----

[.small]#link:#mp_units-symbol_text-032-2constructor-0a[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
link:#mp_units-symbol_text-032-2constructor-0c[symbol&lowbar;text](
    link:#mp_units-fixed_u8string[fixed&lowbar;u8string&lt;N&gt;] const& utf8,
    link:#mp_units-fixed_string[fixed&lowbar;string&lt;M&gt;] const& portable);
----

[.small]#link:#mp_units-symbol_text-032-2constructor-0c[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
consteval
link:#mp_units-symbol_text-032-2constructor-04[symbol&lowbar;text](
    char8&lowbar;t const(& u)[],
    char const(& a)[]);
----

[.small]#link:#mp_units-symbol_text-032-2constructor-04[_» more&period;&period;&period;_]#

Construct from `char`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit(false)
symbol&lowbar;text(char ch);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *ch*
| The value to construct from
|===

Construct from `fixed&lowbar;string`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
explicit(false)
symbol&lowbar;text(link:#mp_units-fixed_string[fixed&lowbar;string&lt;N&gt;] const& txt);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *txt*
| The object to copy construct from
|===

Construct from `char`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
consteval
explicit(false)
symbol&lowbar;text(char const(& txt)[]);
----

== Parameters

[cols=2]
|===
| Name
| Description
| *txt*
| The value to construct from
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
symbol&lowbar;text(
    link:#mp_units-fixed_u8string[fixed&lowbar;u8string&lt;N&gt;] const& utf8,
    link:#mp_units-fixed_string[fixed&lowbar;string&lt;M&gt;] const& portable);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
consteval
symbol&lowbar;text(
    char8&lowbar;t const(& u)[],
    char const(& a)[]);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;deprecated&rsqb;&rsqb;
constexpr
auto const&
ascii() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
empty() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
auto const&
portable() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;deprecated&rsqb;&rsqb;
constexpr
auto const&
unicode() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
auto const&
utf8() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-fixed_string[fixed&lowbar;string&lt;M&gt;] portable&lowbar;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-fixed_u8string[fixed&lowbar;u8string&lt;N&gt;] utf8&lowbar;;
----

System&hyphen;specific reference

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;system&lowbar;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-QuantitySpec[QuantitySpec] auto Q,
    link:#mp_units-Unit[Unit] auto CoU&gt;
requires (!MP&lowbar;UNITS&lowbar;ASSOCIATED&lowbar;UNIT&lowbar;T(decltype(CoU))) &verbar;&verbar; (CoU &equals;&equals; one)
struct system&lowbar;reference;
----

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-system_reference-operator_subs[`operator&lsqb;&rsqb;`] 
| Subscript operator
|===

== Static Data Members

[cols=1]
|===
| Name
| link:#mp_units-system_reference-coherent_unit[`coherent&lowbar;unit`] 
| link:#mp_units-system_reference-quantity_spec[`quantity&lowbar;spec`] 
|===

== Description

This type is used in rare cases where more than one base quantity in a specific system of units uses the same unit&period; For example in a hypothetical system of natural units where constant for speed of light `c &equals; 1`, length and time could be measured in seconds&period; In such cases `system&lowbar;reference` has to be used to explicitly express such a binding&period;

For example&colon;

[,cpp]
----
{.cpp}
 // hypothetical natural system of units for c=1

 inline constexpr struct second final : named_unit<"s"> {} second;
 inline constexpr struct minute final : named_unit<"min", mag<60> * second> {} minute;
 inline constexpr struct gram final : named_unit<"g"> {} gram;
 inline constexpr auto kilogram = si::kilo<gram>;

 inline constexpr struct time : system_reference<isq::time, second> {} time;
 inline constexpr struct length : system_reference<isq::length, second> {} length;
 inline constexpr struct speed : system_reference<isq::speed, second / second> {} speed;
 inline constexpr struct force : system_reference<isq::force, kilogram / second> {} force;
----
== Template Parameters

[cols=2]
|===
| Name
| Description
| *Q*
| quantity for which a unit is being assigned
| *CoU*
| coherent unit for a quantity in this system
|===

Subscript operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;system&lowbar;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; U&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-reference[reference&lt;decltype(Q), U&gt;]
operator&lsqb;&rsqb;(U rhs) const;
----

== Return Value

Quantity reference type

== Parameters

[cols=2]
|===
| Name
| Description
| *rhs*
| The right operand
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;system&lowbar;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto coherent&lowbar;unit = CoU;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;system&lowbar;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr static
auto quantity&lowbar;spec = Q;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct uniform&lowbar;int&lowbar;distribution
    : std::uniform&lowbar;int&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::uniform&lowbar;int&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-uniform_int_distribution-08-base[`base`] 
| link:#mp_units-uniform_int_distribution-08-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-uniform_int_distribution-08-2constructor-078[`uniform&lowbar;int&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-uniform_int_distribution-08-a[`a`] 
| 
| link:#mp_units-uniform_int_distribution-08-b[`b`] 
| 
| link:#mp_units-uniform_int_distribution-08-max[`max`] 
| 
| link:#mp_units-uniform_int_distribution-08-min[`min`] 
| 
| link:#mp_units-uniform_int_distribution-08-operator_call[`operator()`] 
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using base = std::uniform&lowbar;int&lowbar;distribution&lt;rep&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Q::rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-uniform_int_distribution-08-2constructor-06[uniform&lowbar;int&lowbar;distribution]();
----

[.small]#link:#mp_units-uniform_int_distribution-08-2constructor-06[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-uniform_int_distribution-08-2constructor-077[uniform&lowbar;int&lowbar;distribution](
    Q const& a,
    Q const& b);
----

[.small]#link:#mp_units-uniform_int_distribution-08-2constructor-077[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
uniform&lowbar;int&lowbar;distribution();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
uniform&lowbar;int&lowbar;distribution(
    Q const& a,
    Q const& b);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
a() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
b() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;integral&lt;typename Q&colon;&colon;rep&gt;
struct uniform&lowbar;int&lowbar;distribution
    : std::uniform&lowbar;int&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::uniform&lowbar;int&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct uniform&lowbar;real&lowbar;distribution
    : std::uniform&lowbar;real&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::uniform&lowbar;real&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-uniform_real_distribution-0c-base[`base`] 
| link:#mp_units-uniform_real_distribution-0c-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-uniform_real_distribution-0c-2constructor-01[`uniform&lowbar;real&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-uniform_real_distribution-0c-a[`a`] 
| 
| link:#mp_units-uniform_real_distribution-0c-b[`b`] 
| 
| link:#mp_units-uniform_real_distribution-0c-max[`max`] 
| 
| link:#mp_units-uniform_real_distribution-0c-min[`min`] 
| 
| link:#mp_units-uniform_real_distribution-0c-operator_call[`operator()`] 
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using base = std::uniform&lowbar;real&lowbar;distribution&lt;rep&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Q::rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-uniform_real_distribution-0c-2constructor-04[uniform&lowbar;real&lowbar;distribution]();
----

[.small]#link:#mp_units-uniform_real_distribution-0c-2constructor-04[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-uniform_real_distribution-0c-2constructor-02[uniform&lowbar;real&lowbar;distribution](
    Q const& a,
    Q const& b);
----

[.small]#link:#mp_units-uniform_real_distribution-0c-2constructor-02[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
uniform&lowbar;real&lowbar;distribution();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
uniform&lowbar;real&lowbar;distribution(
    Q const& a,
    Q const& b);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
a() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
b() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;floating&lowbar;point&lt;typename Q&colon;&colon;rep&gt;
struct uniform&lowbar;real&lowbar;distribution
    : std::uniform&lowbar;real&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::uniform&lowbar;real&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;symbol&lowbar;formatting&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct unit&lowbar;symbol&lowbar;formatting;
----

== Data Members

[cols=1]
|===
| Name
| link:#mp_units-unit_symbol_formatting-char_set[`char&lowbar;set`] 
| link:#mp_units-unit_symbol_formatting-separator[`separator`] 
| link:#mp_units-unit_symbol_formatting-solidus[`solidus`] 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;symbol&lowbar;formatting&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-character_set[character&lowbar;set] char&lowbar;set = character&lowbar;set&colon;&colon;default&lowbar;character&lowbar;set;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;symbol&lowbar;formatting&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-unit_symbol_separator[unit&lowbar;symbol&lowbar;separator] separator = unit&lowbar;symbol&lowbar;separator&colon;&colon;default&lowbar;separator;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;symbol&lowbar;formatting&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-unit_symbol_solidus[unit&lowbar;symbol&lowbar;solidus] solidus = unit&lowbar;symbol&lowbar;solidus&colon;&colon;default&lowbar;solidus;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct weibull&lowbar;distribution
    : std::weibull&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::weibull&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Types

[cols=1]
|===
| Name
| link:#mp_units-weibull_distribution-0d-base[`base`] 
| link:#mp_units-weibull_distribution-0d-rep[`rep`] 
|===

== Member Functions

[cols=2]
|===
| Name
| Description
| link:#mp_units-weibull_distribution-0d-2constructor-09[`weibull&lowbar;distribution`]         [.small]#[constructor]#
| Constructors
| link:#mp_units-weibull_distribution-0d-max[`max`] 
| 
| link:#mp_units-weibull_distribution-0d-min[`min`] 
| 
| link:#mp_units-weibull_distribution-0d-operator_call[`operator()`] 
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using base = std::weibull&lowbar;distribution&lt;rep&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
using rep = Q::rep;
----

Constructors

== Synopses

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

Default constructor


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-weibull_distribution-0d-2constructor-07[weibull&lowbar;distribution]();
----

[.small]#link:#mp_units-weibull_distribution-0d-2constructor-07[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-weibull_distribution-0d-2constructor-06[weibull&lowbar;distribution](
    link:#mp_units-weibull_distribution-0d-rep[rep] const& a,
    link:#mp_units-weibull_distribution-0d-rep[rep] const& b);
----

[.small]#link:#mp_units-weibull_distribution-0d-2constructor-06[_» more&period;&period;&period;_]#

Default constructor

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
weibull&lowbar;distribution();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
weibull&lowbar;distribution(
    link:#mp_units-weibull_distribution-0d-rep[rep] const& a,
    link:#mp_units-weibull_distribution-0d-rep[rep] const& b);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
max() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
Q
min() const;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Generator&gt;
Q
operator()(Generator& g);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;random&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
requires std&colon;&colon;floating&lowbar;point&lt;typename Q&colon;&colon;rep&gt;
struct weibull&lowbar;distribution
    : std::weibull&lowbar;distribution&lt;Q::rep&gt;
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `std::weibull&lowbar;distribution&lt;Q::rep&gt;`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-QuantitySpec[QuantitySpec] auto QS&gt;
struct zeroth&lowbar;point&lowbar;origin&lowbar; final
    : link:#mp_units-absolute_point_origin[absolute&lowbar;point&lowbar;origin&lt;QS&gt;]
----

== Base Classes

[cols=2]
|===
| Name
| Description
| `link:#mp_units-absolute_point_origin[absolute&lowbar;point&lowbar;origin&lt;QS&gt;]`
| 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class character&lowbar;set : int8&lowbar;t;
----

== Members

[cols=1]
|===
| Name
| `utf8` 
| `unicode` 
| `portable` 
| `ascii` 
| `default&lowbar;character&lowbar;set` 
| `default&lowbar;encoding` 
|===

Quantity character

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;representation&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class quantity&lowbar;character : int8&lowbar;t;
----

== Members

[cols=1]
|===
| Name
| `real&lowbar;scalar` 
| `complex&lowbar;scalar` 
| `vector` 
| `tensor` 
|===

== Description

Scalars, vectors and tensors are mathematical objects that can be used to denote certain physical quantities and their values&period; They are as such independent of the particular choice of a coordinate system, whereas each scalar component of a vector or a tensor and each component vector and component tensor depend on that choice&period;

A scalar is a physical quantity that has magnitude but no direction&period; It might be a real or complex number which affects which operations are allowed on a quantity&period;

Vectors are physical quantities that possess both magnitude and direction and whose operations obey the axioms of a vector space&period;

Tensors can be used to describe more general physical quantities&period; For example, the Cauchy stress tensor possess magnitude, direction, and orientation qualities&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;symbol&lowbar;formatting&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class unit&lowbar;symbol&lowbar;separator : int8&lowbar;t;
----

== Members

[cols=1]
|===
| Name
| `space` 
| `half&lowbar;high&lowbar;dot` 
| `default&lowbar;separator` 
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;symbol&lowbar;formatting&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
enum class unit&lowbar;symbol&lowbar;solidus : int8&lowbar;t;
----

== Members

[cols=1]
|===
| Name
| `one&lowbar;denominator` 
| `always` 
| `never` 
| `default&lowbar;solidus` 
|===

Computes the absolute value of a quantity

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    typename Rep&gt;
requires requires(Rep v) &lcub; abs(v)&semi; &rcub; &verbar;&verbar; requires(Rep v) &lcub; std&colon;&colon;abs(v)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;]
abs(link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& q) noexcept;
----

== Return Value

Quantity The absolute value of a provided quantity

== Parameters

[cols=2]
|===
| Name
| Description
| *q*
| Quantity being the base of the operation
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-QuantitySpec[QuantitySpec] From,
    link:#mp_units-QuantitySpec[QuantitySpec] To&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
bool
castable(
    From from,
    To to);
----

`cbrt` overloads

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&period;h&gt;`

Computes the cubic root of a dimension


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
link:#mp_units-cbrt-05[cbrt](auto d);
----

[.small]#link:#mp_units-cbrt-05[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
link:#mp_units-cbrt-0e[cbrt](link:#mp_units-reference[reference]);
----

[.small]#link:#mp_units-cbrt-0e[_» more&period;&period;&period;_]#

Computes the cubic root of a quantity


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    typename Rep&gt;
requires requires(Rep v) &lcub; cbrt(v)&semi; &rcub; &verbar;&verbar; requires(Rep v) &lcub; std&colon;&colon;cbrt(v)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01[quantity&lt;cbrt(R), Rep&gt;]
link:#mp_units-cbrt-0d[cbrt](link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& q) noexcept;
----

[.small]#link:#mp_units-cbrt-0d[_» more&period;&period;&period;_]#

== Return Value

* Dimension The result of computation
* QuantitySpec The result of computation
* Unit The result of computation
* Quantity The result of computation

== Parameters

[cols=2]
|===
| Name
| Description
| *d*
| Dimension being the base of the operation
| *q*
| Quantity specification being the base of the operation
| *u*
| Unit being the base of the operation
|===

Computes the cubic root of a dimension

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
cbrt(auto d);
----

== Return Value

* Dimension The result of computation
* QuantitySpec The result of computation
* Unit The result of computation

== Parameters

[cols=2]
|===
| Name
| Description
| *d*
| Dimension being the base of the operation
| *q*
| Quantity specification being the base of the operation
| *u*
| Unit being the base of the operation
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
cbrt(link:#mp_units-reference[reference]);
----

Computes the cubic root of a quantity

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    typename Rep&gt;
requires requires(Rep v) &lcub; cbrt(v)&semi; &rcub; &verbar;&verbar; requires(Rep v) &lcub; std&colon;&colon;cbrt(v)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01[quantity&lt;cbrt(R), Rep&gt;]
cbrt(link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& q) noexcept;
----

== Description

Both the quantity value and its quantity specification are the base of the operation&period;

== Return Value

Quantity The result of computation

== Parameters

[cols=2]
|===
| Name
| Description
| *q*
| Quantity being the base of the operation
|===

Computes the smallest quantity with integer representation and unit type To with its number not less than q

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit] auto To,
    auto R,
    typename Rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01[quantity&lt;detail&colon;&colon;clone&lowbar;reference&lowbar;with&lt;To&gt;(R), Rep&gt;]
ceil(link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& q) noexcept
requires requires &lcub; q&period;force&lowbar;in(To)&semi; &rcub; &amp;&amp;
           ((treat&lowbar;as&lowbar;floating&lowbar;point&lt;Rep&gt; &amp;&amp; (requires(Rep v) &lcub; ceil(v)&semi; &rcub; &verbar;&verbar; requires(Rep v) &lcub; std&colon;&colon;ceil(v)&semi; &rcub;)) &verbar;&verbar;
            (!treat&lowbar;as&lowbar;floating&lowbar;point&lt;Rep&gt; &amp;&amp; requires &lcub; representation&lowbar;values&lt;Rep&gt;&colon;&colon;one()&semi; &rcub;));
----

== Return Value

Quantity The rounded quantity with unit type To

== Template Parameters

[cols=2]
|===
| Name
| Description
| *q*
| Quantity being the base of the operation
|===

== Parameters

[cols=2]
|===
| Name
| Description
| *q*
| A quantity
|===

== Synopses

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    auto Vs&period;&period;&period;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
bool
link:#mp_units-contains-0c8[contains]();
----

[.small]#link:#mp_units-contains-0c8[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    template&lt;typename&period;&period;&period;&gt; typename T,
    typename&period;&period;&period; Ts&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
bool
link:#mp_units-contains-01e[contains]();
----

[.small]#link:#mp_units-contains-01e[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    template&lt;auto&period;&period;&period;&gt; typename T,
    typename&period;&period;&period; Ts&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
bool
link:#mp_units-contains-0c1[contains]();
----

[.small]#link:#mp_units-contains-0c1[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    auto Vs&period;&period;&period;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
bool
contains();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    template&lt;typename&period;&period;&period;&gt; typename T,
    typename&period;&period;&period; Ts&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
bool
contains();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    template&lt;auto&period;&period;&period;&gt; typename T,
    typename&period;&period;&period; Ts&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
bool
contains();
----

Computes the cubic power of a unit

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
cubic(auto u);
----

== Return Value

Unit The result of computation

== Parameters

[cols=2]
|===
| Name
| Description
| *u*
| Unit being the base of the operation
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Reference[Reference] R&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-PointOriginFor[PointOriginFor&lt;get&lowbar;quantity&lowbar;spec(R&lcub;&rcub;)&gt;] auto
default&lowbar;point&lowbar;origin(R);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-dimension_symbol_formatting[dimension&lowbar;symbol&lowbar;formatting] fmt = dimension&lowbar;symbol&lowbar;formatting&lcub;&rcub;,
    typename CharT = char,
    link:#mp_units-Dimension[Dimension] D&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
std::basic&lowbar;string&lowbar;view&lt;CharT&gt;
dimension&lowbar;symbol(D);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename CharT = char,
    std::output&lowbar;iterator&lt;CharT&gt; Out,
    link:#mp_units-Dimension[Dimension] D&gt;
constexpr
Out
dimension&lowbar;symbol&lowbar;to(
    Out out,
    D d,
    link:#mp_units-dimension_symbol_formatting[dimension&lowbar;symbol&lowbar;formatting] const& fmt = dimension&lowbar;symbol&lowbar;formatting&lcub;&rcub;);
----

Returns the epsilon of the quantity

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Rep,
    link:#mp_units-Reference[Reference] R&gt;
requires RepresentationOf&lt;Rep, get&lowbar;quantity&lowbar;spec(R&lcub;&rcub;)&gt; &amp;&amp; requires &lcub; std&colon;&colon;numeric&lowbar;limits&lt;Rep&gt;&colon;&colon;epsilon()&semi; &rcub;
&lsqb;&lsqb;deprecated, nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01[quantity&lt;R&lcub;&rcub;, Rep&gt;]
epsilon(R r) noexcept;
----

== Description

The returned value is defined by a &period;

== Return Value

Quantity The epsilon value for quantity&apos;s representation type

== Template Parameters

[cols=2]
|===
| Name
| Description
| *Q*
| Quantity type being the base of the operation
|===

Computes Euler&apos;s raised to the given power

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-ReferenceOf[ReferenceOf&lt;dimensionless&gt;] auto R,
    typename Rep&gt;
requires requires(Rep v) &lcub; exp(v)&semi; &rcub; &verbar;&verbar; requires(Rep v) &lcub; std&colon;&colon;exp(v)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;]
exp(link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& q);
----

== Description

[NOTE]
====
Such an operation has sense only for a dimensionless quantity&period;

====

== Return Value

Quantity The value of the same quantity type

== Parameters

[cols=2]
|===
| Name
| Description
| *q*
| Quantity being the base of the operation
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-QuantitySpec[QuantitySpec] From,
    link:#mp_units-QuantitySpec[QuantitySpec] To&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
bool
explicitly&lowbar;convertible(
    From from,
    To to);
----

Computes the largest quantity with integer representation and unit type To with its number not greater than q

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit] auto To,
    auto R,
    typename Rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01[quantity&lt;detail&colon;&colon;clone&lowbar;reference&lowbar;with&lt;To&gt;(R), Rep&gt;]
floor(link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& q) noexcept
requires requires &lcub; q&period;force&lowbar;in(To)&semi; &rcub; &amp;&amp;
           ((treat&lowbar;as&lowbar;floating&lowbar;point&lt;Rep&gt; &amp;&amp; (requires(Rep v) &lcub; floor(v)&semi; &rcub; &verbar;&verbar; requires(Rep v) &lcub; std&colon;&colon;floor(v)&semi; &rcub;)) &verbar;&verbar;
            (!treat&lowbar;as&lowbar;floating&lowbar;point&lt;Rep&gt; &amp;&amp; requires &lcub; representation&lowbar;values&lt;Rep&gt;&colon;&colon;one()&semi; &rcub;));
----

== Return Value

Quantity The rounded quantity with unit type To

== Template Parameters

[cols=2]
|===
| Name
| Description
| *q*
| Quantity being the base of the operation
|===

== Parameters

[cols=2]
|===
| Name
| Description
| *q*
| A quantity
|===

`fma` overloads

== Synopses

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

Computes the fma of 3 quantities


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    auto S,
    auto T,
    typename Rep1,
    typename Rep2,
    typename Rep3&gt;
requires requires &lcub; get&lowbar;common&lowbar;quantity&lowbar;spec(get&lowbar;quantity&lowbar;spec(R) &ast; get&lowbar;quantity&lowbar;spec(S), get&lowbar;quantity&lowbar;spec(T))&semi; &rcub; &amp;&amp;
           (equivalent(get&lowbar;unit(R) &ast; get&lowbar;unit(S), get&lowbar;unit(T))) &amp;&amp; requires(Rep1 v1, Rep2 v2, Rep3 v3) &lcub;
             requires requires &lcub; fma(v1, v2, v3)&semi; &rcub; &verbar;&verbar; requires &lcub; std&colon;&colon;fma(v1, v2, v3)&semi; &rcub;&semi;
           &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;get&lowbar;common&lowbar;quantity&lowbar;spec(get&lowbar;quantity&lowbar;spec(R) &ast; get&lowbar;quantity&lowbar;spec(S), get&lowbar;quantity&lowbar;spec(T))&gt;] auto
link:#mp_units-fma-09[fma](
    link:#mp_units-quantity-01[quantity&lt;R, Rep1&gt;] const& a,
    link:#mp_units-quantity-01[quantity&lt;S, Rep2&gt;] const& x,
    link:#mp_units-quantity-01[quantity&lt;T, Rep3&gt;] const& b) noexcept;
----

[.small]#link:#mp_units-fma-09[_» more&period;&period;&period;_]#

Computes the fma of 2 quantities and a quantity point


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    auto S,
    auto T,
    auto Origin,
    typename Rep1,
    typename Rep2,
    typename Rep3&gt;
requires requires &lcub; get&lowbar;common&lowbar;quantity&lowbar;spec(get&lowbar;quantity&lowbar;spec(R) &ast; get&lowbar;quantity&lowbar;spec(S), get&lowbar;quantity&lowbar;spec(T))&semi; &rcub; &amp;&amp;
           (equivalent(get&lowbar;unit(R) &ast; get&lowbar;unit(S), get&lowbar;unit(T))) &amp;&amp; requires(Rep1 v1, Rep2 v2, Rep3 v3) &lcub;
             requires requires &lcub; fma(v1, v2, v3)&semi; &rcub; &verbar;&verbar; requires &lcub; std&colon;&colon;fma(v1, v2, v3)&semi; &rcub;&semi;
           &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPointOf[QuantityPointOf&lt;get&lowbar;common&lowbar;quantity&lowbar;spec(get&lowbar;quantity&lowbar;spec(R) &ast; get&lowbar;quantity&lowbar;spec(S), get&lowbar;quantity&lowbar;spec(T))&gt;] auto
link:#mp_units-fma-0a[fma](
    link:#mp_units-quantity-01[quantity&lt;R, Rep1&gt;] const& a,
    link:#mp_units-quantity-01[quantity&lt;S, Rep2&gt;] const& x,
    link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;T, Origin, Rep3&gt;] const& b) noexcept;
----

[.small]#link:#mp_units-fma-0a[_» more&period;&period;&period;_]#

== Return Value

* Quantity&colon; The nearest floating point representable to ax&plus;b
* QuantityPoint&colon; The nearest floating point representable to ax&plus;b

== Parameters

[cols=2]
|===
| Name
| Description
| *a&colon;*
| Multiplicand
| *x&colon;*
| Multiplicand
| *b&colon;*
| Addend
|===

Computes the fma of 3 quantities

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    auto S,
    auto T,
    typename Rep1,
    typename Rep2,
    typename Rep3&gt;
requires requires &lcub; get&lowbar;common&lowbar;quantity&lowbar;spec(get&lowbar;quantity&lowbar;spec(R) &ast; get&lowbar;quantity&lowbar;spec(S), get&lowbar;quantity&lowbar;spec(T))&semi; &rcub; &amp;&amp;
           (equivalent(get&lowbar;unit(R) &ast; get&lowbar;unit(S), get&lowbar;unit(T))) &amp;&amp; requires(Rep1 v1, Rep2 v2, Rep3 v3) &lcub;
             requires requires &lcub; fma(v1, v2, v3)&semi; &rcub; &verbar;&verbar; requires &lcub; std&colon;&colon;fma(v1, v2, v3)&semi; &rcub;&semi;
           &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;get&lowbar;common&lowbar;quantity&lowbar;spec(get&lowbar;quantity&lowbar;spec(R) &ast; get&lowbar;quantity&lowbar;spec(S), get&lowbar;quantity&lowbar;spec(T))&gt;] auto
fma(
    link:#mp_units-quantity-01[quantity&lt;R, Rep1&gt;] const& a,
    link:#mp_units-quantity-01[quantity&lt;S, Rep2&gt;] const& x,
    link:#mp_units-quantity-01[quantity&lt;T, Rep3&gt;] const& b) noexcept;
----

== Return Value

Quantity&colon; The nearest floating point representable to ax&plus;b

== Parameters

[cols=2]
|===
| Name
| Description
| *a&colon;*
| Multiplicand
| *x&colon;*
| Multiplicand
| *b&colon;*
| Addend
| *a*
| A quantity
| *x*
| A quantity
| *b*
| A quantity
|===

Computes the fma of 2 quantities and a quantity point

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    auto S,
    auto T,
    auto Origin,
    typename Rep1,
    typename Rep2,
    typename Rep3&gt;
requires requires &lcub; get&lowbar;common&lowbar;quantity&lowbar;spec(get&lowbar;quantity&lowbar;spec(R) &ast; get&lowbar;quantity&lowbar;spec(S), get&lowbar;quantity&lowbar;spec(T))&semi; &rcub; &amp;&amp;
           (equivalent(get&lowbar;unit(R) &ast; get&lowbar;unit(S), get&lowbar;unit(T))) &amp;&amp; requires(Rep1 v1, Rep2 v2, Rep3 v3) &lcub;
             requires requires &lcub; fma(v1, v2, v3)&semi; &rcub; &verbar;&verbar; requires &lcub; std&colon;&colon;fma(v1, v2, v3)&semi; &rcub;&semi;
           &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPointOf[QuantityPointOf&lt;get&lowbar;common&lowbar;quantity&lowbar;spec(get&lowbar;quantity&lowbar;spec(R) &ast; get&lowbar;quantity&lowbar;spec(S), get&lowbar;quantity&lowbar;spec(T))&gt;] auto
fma(
    link:#mp_units-quantity-01[quantity&lt;R, Rep1&gt;] const& a,
    link:#mp_units-quantity-01[quantity&lt;S, Rep2&gt;] const& x,
    link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;T, Origin, Rep3&gt;] const& b) noexcept;
----

== Return Value

QuantityPoint&colon; The nearest floating point representable to ax&plus;b

== Parameters

[cols=2]
|===
| Name
| Description
| *a&colon;*
| Multiplicand
| *x&colon;*
| Multiplicand
| *b&colon;*
| Addend
| *a*
| A quantity
| *x*
| A quantity
| *b*
| A quantity point
|===

Computes the floating&hyphen;point remainder of the division operation x &sol; y&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R1,
    typename Rep1,
    auto R2,
    typename Rep2&gt;
requires requires(Rep1 v1, Rep2 v2) &lcub;
    get&lowbar;common&lowbar;reference(R1, R2)&semi;
    requires requires &lcub; fmod(v1, v2)&semi; &rcub; &verbar;&verbar; requires &lcub; std&colon;&colon;fmod(v1, v2)&semi; &rcub;&semi;
  &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;get&lowbar;quantity&lowbar;spec(R1)&gt;] auto
fmod(
    link:#mp_units-quantity-01[quantity&lt;R1, Rep1&gt;] const& x,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& y) noexcept;
----

== Parameters

[cols=2]
|===
| Name
| Description
| *x*
| A quantity
| *y*
| A quantity
|===

== Synopses

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    same&lowbar;as&lt;T&gt; auto V&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
auto
link:#mp_units-get-039[get]();
----

[.small]#link:#mp_units-get-039[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    template&lt;typename&period;&period;&period;&gt; typename T,
    typename T1&gt;
requires is&lowbar;specialization&lowbar;of&lt;T1, T&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
auto
link:#mp_units-get-01[get]();
----

[.small]#link:#mp_units-get-01[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    template&lt;auto&period;&period;&period;&gt; typename T,
    typename T1&gt;
requires is&lowbar;specialization&lowbar;of&lowbar;v&lt;T1, T&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
auto
link:#mp_units-get-05f[get]();
----

[.small]#link:#mp_units-get-05f[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    auto V1,
    auto V2,
    auto Vs&period;&period;&period;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
auto
link:#mp_units-get-07[get]();
----

[.small]#link:#mp_units-get-07[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    template&lt;typename&period;&period;&period;&gt; typename T,
    typename T1,
    typename T2,
    typename&period;&period;&period; Ts&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
auto
link:#mp_units-get-03d[get]();
----

[.small]#link:#mp_units-get-03d[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    template&lt;auto&period;&period;&period;&gt; typename T,
    typename T1,
    typename T2,
    typename&period;&period;&period; Ts&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
auto
link:#mp_units-get-05b[get]();
----

[.small]#link:#mp_units-get-05b[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    same&lowbar;as&lt;T&gt; auto V&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
auto
get();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    template&lt;typename&period;&period;&period;&gt; typename T,
    typename T1&gt;
requires is&lowbar;specialization&lowbar;of&lt;T1, T&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
auto
get();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    template&lt;auto&period;&period;&period;&gt; typename T,
    typename T1&gt;
requires is&lowbar;specialization&lowbar;of&lowbar;v&lt;T1, T&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
auto
get();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    auto V1,
    auto V2,
    auto Vs&period;&period;&period;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
auto
get();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    template&lt;typename&period;&period;&period;&gt; typename T,
    typename T1,
    typename T2,
    typename&period;&period;&period; Ts&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
auto
get();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    template&lt;auto&period;&period;&period;&gt; typename T,
    typename T1,
    typename T2,
    typename&period;&period;&period; Ts&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
auto
get();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
auto
get&lowbar;canonical&lowbar;unit(auto u);
----

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
link:#mp_units-get_common_quantity_spec-04[get&lowbar;common&lowbar;quantity&lowbar;spec](auto q);
----

[.small]#link:#mp_units-get_common_quantity_spec-04[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-QuantitySpec[QuantitySpec] Q1,
    link:#mp_units-QuantitySpec[QuantitySpec] Q2&gt;
requires (detail&colon;&colon;have&lowbar;common&lowbar;quantity&lowbar;spec(Q1&lcub;&rcub;, Q2&lcub;&rcub;))
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
link:#mp_units-get_common_quantity_spec-01[get&lowbar;common&lowbar;quantity&lowbar;spec](
    Q1,
    Q2);
----

[.small]#link:#mp_units-get_common_quantity_spec-01[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
link:#mp_units-get_common_quantity_spec-0a[get&lowbar;common&lowbar;quantity&lowbar;spec](
    auto q1,
    auto q2,
    auto q3,
    auto&period;&period;&period; rest)
requires requires &lcub; mp&lowbar;units&colon;&colon;get&lowbar;common&lowbar;quantity&lowbar;spec(mp&lowbar;units&colon;&colon;get&lowbar;common&lowbar;quantity&lowbar;spec(q1, q2), q3, rest&period;&period;&period;)&semi; &rcub;;
----

[.small]#link:#mp_units-get_common_quantity_spec-0a[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
get&lowbar;common&lowbar;quantity&lowbar;spec(auto q);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-QuantitySpec[QuantitySpec] Q1,
    link:#mp_units-QuantitySpec[QuantitySpec] Q2&gt;
requires (detail&colon;&colon;have&lowbar;common&lowbar;quantity&lowbar;spec(Q1&lcub;&rcub;, Q2&lcub;&rcub;))
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
get&lowbar;common&lowbar;quantity&lowbar;spec(
    Q1,
    Q2);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
get&lowbar;common&lowbar;quantity&lowbar;spec(
    auto q1,
    auto q2,
    auto q3,
    auto&period;&period;&period; rest)
requires requires &lcub; mp&lowbar;units&colon;&colon;get&lowbar;common&lowbar;quantity&lowbar;spec(mp&lowbar;units&colon;&colon;get&lowbar;common&lowbar;quantity&lowbar;spec(q1, q2), q3, rest&period;&period;&period;)&semi; &rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Reference[Reference] R1,
    link:#mp_units-Reference[Reference] R2,
    link:#mp_units-Reference[Reference]&period;&period;&period; Rest&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Reference[Reference] auto
get&lowbar;common&lowbar;reference(
    auto u1,
    auto u2,
    auto&period;&period;&period; rest)
requires (!(MP&lowbar;UNITS&lowbar;ASSOCIATED&lowbar;UNIT&lowbar;T(R1) &amp;&amp; MP&lowbar;UNITS&lowbar;ASSOCIATED&lowbar;UNIT&lowbar;T(R2) &amp;&amp;
             (&period;&period;&period; &amp;&amp; MP&lowbar;UNITS&lowbar;ASSOCIATED&lowbar;UNIT&lowbar;T(Rest)))) &amp;&amp;
          requires &lcub;
            get&lowbar;common&lowbar;quantity&lowbar;spec(get&lowbar;quantity&lowbar;spec(r1), get&lowbar;quantity&lowbar;spec(r2), get&lowbar;quantity&lowbar;spec(rest)&period;&period;&period;)&semi;
            get&lowbar;common&lowbar;unit(get&lowbar;unit(r1), get&lowbar;unit(r2), get&lowbar;unit(rest)&period;&period;&period;)&semi;
          &rcub;;
----

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
link:#mp_units-get_common_unit-0e[get&lowbar;common&lowbar;unit](auto u);
----

[.small]#link:#mp_units-get_common_unit-0e[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit]&period;&period;&period; Us,
    &sol;&ast; implementation-defined &ast;&sol; NewUnit&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
link:#mp_units-get_common_unit-08c[get&lowbar;common&lowbar;unit](
    NewUnit nu,
    link:#mp_units-common_unit[common&lowbar;unit&lt;Us&period;&period;&period;&gt;] cu);
----

[.small]#link:#mp_units-get_common_unit-08c[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit] U1,
    &sol;&ast; implementation-defined &ast;&sol; U2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
link:#mp_units-get_common_unit-0d3[get&lowbar;common&lowbar;unit](
    U1 u1,
    U2 u2);
----

[.small]#link:#mp_units-get_common_unit-0d3[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit]&period;&period;&period; Us,
    &sol;&ast; implementation-defined &ast;&sol; NewUnit&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
link:#mp_units-get_common_unit-08d[get&lowbar;common&lowbar;unit](
    link:#mp_units-common_unit[common&lowbar;unit&lt;Us&period;&period;&period;&gt;],
    NewUnit);
----

[.small]#link:#mp_units-get_common_unit-08d[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit] Front,
    link:#mp_units-Unit[Unit]&period;&period;&period; Rest,
    link:#mp_units-Unit[Unit]&period;&period;&period; Us&gt;
requires (detail&colon;&colon;UnitConvertibleTo&lt;common&lowbar;unit&lt;Front, Rest&period;&period;&period;&gt;, common&lowbar;unit&lt;Us&period;&period;&period;&gt;&lcub;&rcub;&gt;)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
link:#mp_units-get_common_unit-0d7[get&lowbar;common&lowbar;unit](
    link:#mp_units-common_unit[common&lowbar;unit&lt;Front, Rest&period;&period;&period;&gt;],
    link:#mp_units-common_unit[common&lowbar;unit&lt;Us&period;&period;&period;&gt;]);
----

[.small]#link:#mp_units-get_common_unit-0d7[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
link:#mp_units-get_common_unit-02[get&lowbar;common&lowbar;unit](
    auto u1,
    auto u2,
    auto u3,
    auto&period;&period;&period; rest)
requires requires &lcub; get&lowbar;common&lowbar;unit(get&lowbar;common&lowbar;unit(u1, u2), u3, rest&period;&period;&period;)&semi; &rcub;;
----

[.small]#link:#mp_units-get_common_unit-02[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
get&lowbar;common&lowbar;unit(auto u);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit]&period;&period;&period; Us,
    &sol;&ast; implementation-defined &ast;&sol; NewUnit&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
get&lowbar;common&lowbar;unit(
    NewUnit nu,
    link:#mp_units-common_unit[common&lowbar;unit&lt;Us&period;&period;&period;&gt;] cu);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit] U1,
    &sol;&ast; implementation-defined &ast;&sol; U2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
get&lowbar;common&lowbar;unit(
    U1 u1,
    U2 u2);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit]&period;&period;&period; Us,
    &sol;&ast; implementation-defined &ast;&sol; NewUnit&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
get&lowbar;common&lowbar;unit(
    link:#mp_units-common_unit[common&lowbar;unit&lt;Us&period;&period;&period;&gt;],
    NewUnit);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit] Front,
    link:#mp_units-Unit[Unit]&period;&period;&period; Rest,
    link:#mp_units-Unit[Unit]&period;&period;&period; Us&gt;
requires (detail&colon;&colon;UnitConvertibleTo&lt;common&lowbar;unit&lt;Front, Rest&period;&period;&period;&gt;, common&lowbar;unit&lt;Us&period;&period;&period;&gt;&lcub;&rcub;&gt;)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
get&lowbar;common&lowbar;unit(
    link:#mp_units-common_unit[common&lowbar;unit&lt;Front, Rest&period;&period;&period;&gt;],
    link:#mp_units-common_unit[common&lowbar;unit&lt;Us&period;&period;&period;&gt;]);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
get&lowbar;common&lowbar;unit(
    auto u1,
    auto u2,
    auto u3,
    auto&period;&period;&period; rest)
requires requires &lcub; get&lowbar;common&lowbar;unit(get&lowbar;common&lowbar;unit(u1, u2), u3, rest&period;&period;&period;)&semi; &rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-QuantitySpec[QuantitySpec] Q&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol; auto
get&lowbar;kind(Q);
----

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&lowbar;concepts&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-AssociatedUnit[AssociatedUnit] U&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
link:#mp_units-get_quantity_spec-029[get&lowbar;quantity&lowbar;spec](U);
----

[.small]#link:#mp_units-get_quantity_spec-029[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Q,
    typename U&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
link:#mp_units-get_quantity_spec-00[get&lowbar;quantity&lowbar;spec](link:#mp_units-reference[reference&lt;Q, U&gt;]);
----

[.small]#link:#mp_units-get_quantity_spec-00[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-AssociatedUnit[AssociatedUnit] U&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
get&lowbar;quantity&lowbar;spec(U);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Q,
    typename U&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
get&lowbar;quantity&lowbar;spec(link:#mp_units-reference[reference&lt;Q, U&gt;]);
----

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&lowbar;concepts&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
link:#mp_units-get_unit-06[get&lowbar;unit](auto u);
----

[.small]#link:#mp_units-get_unit-06[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Q,
    typename U&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
link:#mp_units-get_unit-09[get&lowbar;unit](link:#mp_units-reference[reference&lt;Q, U&gt;]);
----

[.small]#link:#mp_units-get_unit-09[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
get&lowbar;unit(auto u);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Q,
    typename U&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
get&lowbar;unit(link:#mp_units-reference[reference&lt;Q, U&gt;]);
----

`hypot` overloads

== Synopses

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

Computes the square root of the sum of the squares of x and y, without undue overflow or underflow at intermediate stages of the computation


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R1,
    typename Rep1,
    auto R2,
    typename Rep2&gt;
requires requires(Rep1 v1, Rep2 v2) &lcub;
    get&lowbar;common&lowbar;reference(R1, R2)&semi;
    requires requires &lcub; hypot(v1, v2)&semi; &rcub; &verbar;&verbar; requires &lcub; std&colon;&colon;hypot(v1, v2)&semi; &rcub;&semi;
  &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;get&lowbar;quantity&lowbar;spec(get&lowbar;common&lowbar;reference(R1, R2))&gt;] auto
link:#mp_units-hypot-0e[hypot](
    link:#mp_units-quantity-01[quantity&lt;R1, Rep1&gt;] const& x,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& y) noexcept;
----

[.small]#link:#mp_units-hypot-0e[_» more&period;&period;&period;_]#

Computes the square root of the sum of the squares of x, y, and z, without undue overflow or underflow at intermediate stages of the computation


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R1,
    typename Rep1,
    auto R2,
    typename Rep2,
    auto R3,
    typename Rep3&gt;
requires requires(Rep1 v1, Rep2 v2, Rep3 v3) &lcub;
    get&lowbar;common&lowbar;reference(R1, R2, R3)&semi;
    requires requires &lcub; hypot(v1, v2, v3)&semi; &rcub; &verbar;&verbar; requires &lcub; std&colon;&colon;hypot(v1, v2, v3)&semi; &rcub;&semi;
  &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;get&lowbar;quantity&lowbar;spec(get&lowbar;common&lowbar;reference(R1, R2, R3))&gt;] auto
link:#mp_units-hypot-08[hypot](
    link:#mp_units-quantity-01[quantity&lt;R1, Rep1&gt;] const& x,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& y,
    link:#mp_units-quantity-01[quantity&lt;R3, Rep3&gt;] const& z) noexcept;
----

[.small]#link:#mp_units-hypot-08[_» more&period;&period;&period;_]#

Computes the square root of the sum of the squares of x and y, without undue overflow or underflow at intermediate stages of the computation

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R1,
    typename Rep1,
    auto R2,
    typename Rep2&gt;
requires requires(Rep1 v1, Rep2 v2) &lcub;
    get&lowbar;common&lowbar;reference(R1, R2)&semi;
    requires requires &lcub; hypot(v1, v2)&semi; &rcub; &verbar;&verbar; requires &lcub; std&colon;&colon;hypot(v1, v2)&semi; &rcub;&semi;
  &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;get&lowbar;quantity&lowbar;spec(get&lowbar;common&lowbar;reference(R1, R2))&gt;] auto
hypot(
    link:#mp_units-quantity-01[quantity&lt;R1, Rep1&gt;] const& x,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& y) noexcept;
----

== Parameters

[cols=2]
|===
| Name
| Description
| *x*
| A quantity
| *y*
| A quantity
|===

Computes the square root of the sum of the squares of x, y, and z, without undue overflow or underflow at intermediate stages of the computation

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R1,
    typename Rep1,
    auto R2,
    typename Rep2,
    auto R3,
    typename Rep3&gt;
requires requires(Rep1 v1, Rep2 v2, Rep3 v3) &lcub;
    get&lowbar;common&lowbar;reference(R1, R2, R3)&semi;
    requires requires &lcub; hypot(v1, v2, v3)&semi; &rcub; &verbar;&verbar; requires &lcub; std&colon;&colon;hypot(v1, v2, v3)&semi; &rcub;&semi;
  &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;get&lowbar;quantity&lowbar;spec(get&lowbar;common&lowbar;reference(R1, R2, R3))&gt;] auto
hypot(
    link:#mp_units-quantity-01[quantity&lt;R1, Rep1&gt;] const& x,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& y,
    link:#mp_units-quantity-01[quantity&lt;R3, Rep3&gt;] const& z) noexcept;
----

== Parameters

[cols=2]
|===
| Name
| Description
| *x*
| A quantity
| *y*
| A quantity
| *z*
| A quantity
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-QuantitySpec[QuantitySpec] From,
    link:#mp_units-QuantitySpec[QuantitySpec] To&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
bool
implicitly&lowbar;convertible(
    From from,
    To to);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-QuantitySpec[QuantitySpec] QS1,
    link:#mp_units-QuantitySpec[QuantitySpec] QS2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
bool
interconvertible(
    QS1 qs1,
    QS2 qs2);
----

Computes the inverse of a quantity in a provided unit

== Synopses

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
link:#mp_units-inverse-0d[inverse](auto d);
----

[.small]#link:#mp_units-inverse-0d[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
link:#mp_units-inverse-0b[inverse](link:#mp_units-reference[reference]);
----

[.small]#link:#mp_units-inverse-0b[_» more&period;&period;&period;_]#

Computes the inverse of a quantity in a provided unit


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit] auto To,
    auto R,
    typename Rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-inverse-09[inverse](link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& q)
requires (!detail&colon;&colon;scaling&lowbar;overflows&lowbar;non&lowbar;zero&lowbar;values&lt;Rep&gt;(one &sol; get&lowbar;unit(R), To)) &amp;&amp; requires &lcub;
    representation&lowbar;values&lt;Rep&gt;&colon;&colon;one()&semi;
    value&lowbar;cast&lt;To&gt;(representation&lowbar;values&lt;Rep&gt;&colon;&colon;one() &sol; q)&semi;
  &rcub;;
----

[.small]#link:#mp_units-inverse-09[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
inverse(auto d);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
inverse(link:#mp_units-reference[reference]);
----

Computes the inverse of a quantity in a provided unit

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit] auto To,
    auto R,
    typename Rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
inverse(link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& q)
requires (!detail&colon;&colon;scaling&lowbar;overflows&lowbar;non&lowbar;zero&lowbar;values&lt;Rep&gt;(one &sol; get&lowbar;unit(R), To)) &amp;&amp; requires &lcub;
    representation&lowbar;values&lt;Rep&gt;&colon;&colon;one()&semi;
    value&lowbar;cast&lt;To&gt;(representation&lowbar;values&lt;Rep&gt;&colon;&colon;one() &sol; q)&semi;
  &rcub;;
----

== Parameters

[cols=2]
|===
| Name
| Description
| *q*
| A quantity
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;compare&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
requires requires &lcub;
    &lcub; T&colon;&colon;zero() &rcub; &hyphen;&gt; std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;T&gt;&semi;
  &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
is&lowbar;eq&lowbar;zero(T v);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;compare&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
requires requires &lcub;
    &lcub; T&colon;&colon;zero() &rcub; &hyphen;&gt; std&colon;&colon;three&lowbar;way&lowbar;comparable&lowbar;with&lt;T&gt;&semi;
  &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
is&lowbar;gt&lowbar;zero(T v);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;compare&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
requires requires &lcub;
    &lcub; T&colon;&colon;zero() &rcub; &hyphen;&gt; std&colon;&colon;three&lowbar;way&lowbar;comparable&lowbar;with&lt;T&gt;&semi;
  &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
is&lowbar;gteq&lowbar;zero(T v);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;compare&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
requires requires &lcub;
    &lcub; T&colon;&colon;zero() &rcub; &hyphen;&gt; std&colon;&colon;three&lowbar;way&lowbar;comparable&lowbar;with&lt;T&gt;&semi;
  &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
is&lowbar;lt&lowbar;zero(T v);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;compare&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
requires requires &lcub;
    &lcub; T&colon;&colon;zero() &rcub; &hyphen;&gt; std&colon;&colon;three&lowbar;way&lowbar;comparable&lowbar;with&lt;T&gt;&semi;
  &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
is&lowbar;lteq&lowbar;zero(T v);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;compare&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
requires requires &lcub;
    &lcub; T&colon;&colon;zero() &rcub; &hyphen;&gt; std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;T&gt;&semi;
  &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
is&lowbar;neq&lowbar;zero(T v);
----

`isfinite` overloads

== Synopses

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

Determines if a quantity is finite&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    typename Rep&gt;
requires requires(Rep v) &lcub; isfinite(v)&semi; &rcub; &verbar;&verbar; requires(Rep v) &lcub; std&colon;&colon;isfinite(v)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
link:#mp_units-isfinite-0d[isfinite](link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& a) noexcept;
----

[.small]#link:#mp_units-isfinite-0d[_» more&period;&period;&period;_]#

Determines if a quantity point is finite&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    auto PO,
    typename Rep&gt;
requires requires(quantity&lt;R, Rep&gt; q) &lcub; isfinite(q)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
link:#mp_units-isfinite-0b[isfinite](link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;R, PO, Rep&gt;] const& a) noexcept;
----

[.small]#link:#mp_units-isfinite-0b[_» more&period;&period;&period;_]#

== Return Value

* bool&colon; Whether the quantity is finite or not&period;
* bool&colon; Whether the quantity point is finite or not&period;

== Parameters

[cols=2]
|===
| Name
| Description
| *a&colon;*
| Quantity to analyze&period;
|===

Determines if a quantity is finite&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    typename Rep&gt;
requires requires(Rep v) &lcub; isfinite(v)&semi; &rcub; &verbar;&verbar; requires(Rep v) &lcub; std&colon;&colon;isfinite(v)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
isfinite(link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& a) noexcept;
----

== Return Value

bool&colon; Whether the quantity is finite or not&period;

== Parameters

[cols=2]
|===
| Name
| Description
| *a&colon;*
| Quantity to analyze&period;
| *a*
| A quantity
|===

Determines if a quantity point is finite&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    auto PO,
    typename Rep&gt;
requires requires(quantity&lt;R, Rep&gt; q) &lcub; isfinite(q)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
isfinite(link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;R, PO, Rep&gt;] const& a) noexcept;
----

== Return Value

bool&colon; Whether the quantity point is finite or not&period;

== Parameters

[cols=2]
|===
| Name
| Description
| *a&colon;*
| Quantity point to analyze&period;
| *a*
| A quantity point
|===

`isinf` overloads

== Synopses

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

Determines if a quantity is infinite&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    typename Rep&gt;
requires requires(Rep v) &lcub; isinf(v)&semi; &rcub; &verbar;&verbar; requires(Rep v) &lcub; std&colon;&colon;isinf(v)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
link:#mp_units-isinf-0f[isinf](link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& a) noexcept;
----

[.small]#link:#mp_units-isinf-0f[_» more&period;&period;&period;_]#

Determines if a quantity point is infinite&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    auto PO,
    typename Rep&gt;
requires requires(quantity&lt;R, Rep&gt; q) &lcub; isinf(q)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
link:#mp_units-isinf-04[isinf](link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;R, PO, Rep&gt;] const& a) noexcept;
----

[.small]#link:#mp_units-isinf-04[_» more&period;&period;&period;_]#

== Return Value

* bool&colon; Whether the quantity is infinite or not&period;
* bool&colon; Whether the quantity point is infinite or not&period;

== Parameters

[cols=2]
|===
| Name
| Description
| *a&colon;*
| Quantity to analyze&period;
|===

Determines if a quantity is infinite&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    typename Rep&gt;
requires requires(Rep v) &lcub; isinf(v)&semi; &rcub; &verbar;&verbar; requires(Rep v) &lcub; std&colon;&colon;isinf(v)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
isinf(link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& a) noexcept;
----

== Return Value

bool&colon; Whether the quantity is infinite or not&period;

== Parameters

[cols=2]
|===
| Name
| Description
| *a&colon;*
| Quantity to analyze&period;
| *a*
| A quantity
|===

Determines if a quantity point is infinite&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    auto PO,
    typename Rep&gt;
requires requires(quantity&lt;R, Rep&gt; q) &lcub; isinf(q)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
isinf(link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;R, PO, Rep&gt;] const& a) noexcept;
----

== Return Value

bool&colon; Whether the quantity point is infinite or not&period;

== Parameters

[cols=2]
|===
| Name
| Description
| *a&colon;*
| Quantity point to analyze&period;
| *a*
| A quantity point
|===

`isnan` overloads

== Synopses

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

Determines if a quantity is a nan&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    typename Rep&gt;
requires requires(Rep v) &lcub; isnan(v)&semi; &rcub; &verbar;&verbar; requires(Rep v) &lcub; std&colon;&colon;isnan(v)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
link:#mp_units-isnan-00[isnan](link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& a) noexcept;
----

[.small]#link:#mp_units-isnan-00[_» more&period;&period;&period;_]#

Determines if a quantity point is a nan&period;


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    auto PO,
    typename Rep&gt;
requires requires(quantity&lt;R, Rep&gt; q) &lcub; isnan(q)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
link:#mp_units-isnan-082[isnan](link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;R, PO, Rep&gt;] const& a) noexcept;
----

[.small]#link:#mp_units-isnan-082[_» more&period;&period;&period;_]#

== Return Value

* bool&colon; Whether the quantity is a NaN or not&period;
* bool&colon; Whether the quantity point is a NaN or not&period;

== Parameters

[cols=2]
|===
| Name
| Description
| *a&colon;*
| Quantity to analyze&period;
|===

Determines if a quantity is a nan&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    typename Rep&gt;
requires requires(Rep v) &lcub; isnan(v)&semi; &rcub; &verbar;&verbar; requires(Rep v) &lcub; std&colon;&colon;isnan(v)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
isnan(link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& a) noexcept;
----

== Return Value

bool&colon; Whether the quantity is a NaN or not&period;

== Parameters

[cols=2]
|===
| Name
| Description
| *a&colon;*
| Quantity to analyze&period;
| *a*
| A quantity
|===

Determines if a quantity point is a nan&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    auto PO,
    typename Rep&gt;
requires requires(quantity&lt;R, Rep&gt; q) &lcub; isnan(q)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
isnan(link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;R, PO, Rep&gt;] const& a) noexcept;
----

== Return Value

bool&colon; Whether the quantity point is a NaN or not&period;

== Parameters

[cols=2]
|===
| Name
| Description
| *a&colon;*
| Quantity point to analyze&period;
| *a*
| A quantity point
|===

Linear interpolation or extrapolation

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R1,
    auto Origin,
    typename Rep1,
    auto R2,
    typename Rep2,
    typename Factor&gt;
requires requires(Rep1 a, Rep2 b, Factor t) &lcub;
    get&lowbar;common&lowbar;reference(R1, R2)&semi;
    requires requires &lcub; lerp(a, b, t)&semi; &rcub; &verbar;&verbar; requires &lcub; std&colon;&colon;lerp(a, b, t)&semi; &rcub;&semi;
  &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPointOf[QuantityPointOf&lt;get&lowbar;quantity&lowbar;spec(get&lowbar;common&lowbar;reference(R1, R2))&gt;] auto
lerp(
    link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;R1, Origin, Rep1&gt;] const& a,
    link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;R2, Origin, Rep2&gt;] const& b,
    Factor const& t) noexcept;
----

== Description

Computes the linear interpolation between `a` and `b`, if the parameter `t` is inside `&lsqb;​0​, 1)` (the linear extrapolation otherwise), i&period;e&period; the result of `a &plus; t(b − a)` with accounting for floating&hyphen;point calculation imprecision&period;

== Parameters

[cols=2]
|===
| Name
| Description
| *a*
| A quantity point
| *b*
| A quantity point
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
T
magnitude(link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector] const& vec)
requires treat&lowbar;as&lowbar;floating&lowbar;point&lt;T&gt;;
----

Computes the midpoint of two points

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R1,
    auto Origin,
    typename Rep1,
    auto R2,
    typename Rep2&gt;
requires requires(Rep1 a, Rep2 b) &lcub;
    get&lowbar;common&lowbar;reference(R1, R2)&semi;
    requires requires &lcub; midpoint(a, b)&semi; &rcub; &verbar;&verbar; requires &lcub; std&colon;&colon;midpoint(a, b)&semi; &rcub;&semi;
  &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPointOf[QuantityPointOf&lt;get&lowbar;quantity&lowbar;spec(get&lowbar;common&lowbar;reference(R1, R2))&gt;] auto
midpoint(
    link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;R1, Origin, Rep1&gt;] const& a,
    link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;R2, Origin, Rep2&gt;] const& b) noexcept;
----

== Parameters

[cols=2]
|===
| Name
| Description
| *a*
| A quantity point
| *b*
| A quantity point
|===

Modulus operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] Value&gt;
requires detail&colon;&colon;DimensionlessOne&lt;Q&colon;&colon;reference&gt; &amp;&amp;
             detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;modulus&lt;&gt;, Rep, const Value&amp;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_mod-09[operator%](
    Q const& lhs,
    Value const& rhs);
----

[.small]#link:#mp_units-operator_mod-09[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] Value&gt;
requires detail&colon;&colon;DimensionlessOne&lt;Q&colon;&colon;reference&gt; &amp;&amp;
             detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;modulus&lt;&gt;, Rep, const Value&amp;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_mod-0d[operator%](
    Value const& lhs,
    Q const& rhs);
----

[.small]#link:#mp_units-operator_mod-0d[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    auto R2,
    typename Rep2&gt;
requires (!treat&lowbar;as&lowbar;floating&lowbar;point&lt;Rep&gt;) &amp;&amp; (!treat&lowbar;as&lowbar;floating&lowbar;point&lt;Rep2&gt;) &amp;&amp;
            detail&colon;&colon;CommonlyInvocableQuantities&lt;std&colon;&colon;modulus&lt;&gt;, quantity, quantity&lt;R2, Rep2&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_mod-05[operator%](
    Q const& lhs,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& rhs);
----

[.small]#link:#mp_units-operator_mod-05[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] Value&gt;
requires detail&colon;&colon;DimensionlessOne&lt;Q&colon;&colon;reference&gt; &amp;&amp;
             detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;modulus&lt;&gt;, Rep, const Value&amp;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator%(
    Q const& lhs,
    Value const& rhs);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] Value&gt;
requires detail&colon;&colon;DimensionlessOne&lt;Q&colon;&colon;reference&gt; &amp;&amp;
             detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;modulus&lt;&gt;, Rep, const Value&amp;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator%(
    Value const& lhs,
    Q const& rhs);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    auto R2,
    typename Rep2&gt;
requires (!treat&lowbar;as&lowbar;floating&lowbar;point&lt;Rep&gt;) &amp;&amp; (!treat&lowbar;as&lowbar;floating&lowbar;point&lt;Rep2&gt;) &amp;&amp;
            detail&colon;&colon;CommonlyInvocableQuantities&lt;std&colon;&colon;modulus&lt;&gt;, quantity, quantity&lt;R2, Rep2&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator%(
    Q const& lhs,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& rhs);
----

Multiplication operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-AssociatedUnit[AssociatedUnit] U1&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
link:#mp_units-operator_star-02b[operator&ast;](
    U1 lhs,
    link:#mp_units-reference[reference] rhs);
----

[.small]#link:#mp_units-operator_star-02b[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-AssociatedUnit[AssociatedUnit] U2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
link:#mp_units-operator_star-0f[operator&ast;](
    link:#mp_units-reference[reference] lhs,
    U2 rhs);
----

[.small]#link:#mp_units-operator_star-0f[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Reference[Reference] R,
    typename Q&gt;
requires Quantity&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;Q&gt;&gt;
constexpr
auto
link:#mp_units-operator_star-009[operator&ast;](
    R lhs,
    Q&& q) = delete;
----

[.small]#link:#mp_units-operator_star-009[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Reference[Reference] R,
    typename Rep&gt;
requires RepresentationOf&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;Rep&gt;, get&lowbar;quantity&lowbar;spec(R&lcub;&rcub;)&gt;
constexpr
auto
link:#mp_units-operator_star-08db[operator&ast;](
    R lhs,
    Rep&& rhs) = delete;
----

[.small]#link:#mp_units-operator_star-08db[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Q2,
    typename U2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
link:#mp_units-operator_star-05[operator&ast;](
    link:#mp_units-reference[reference] lhs,
    link:#mp_units-reference[reference&lt;Q2, U2&gt;] rhs);
----

[.small]#link:#mp_units-operator_star-05[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    typename Value&gt;
requires (!Quantity&lt;Value&gt;) &amp;&amp;
            (!Reference&lt;Value&gt;) &amp;&amp; detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;multiplies&lt;&gt;, rep, const Value&amp;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
link:#mp_units-operator_star-002[operator&ast;](
    Q const& q,
    Value const& val);
----

[.small]#link:#mp_units-operator_star-002[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Value,
    std::derived&lowbar;from&lt;quantity&gt; Q&gt;
requires (!Quantity&lt;Value&gt;) &amp;&amp;
            (!Reference&lt;Value&gt;) &amp;&amp; detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;multiplies&lt;&gt;, const Value&amp;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
link:#mp_units-operator_star-03[operator&ast;](
    Value const& val,
    Q const& q);
----

[.small]#link:#mp_units-operator_star-03[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    auto R2,
    typename Rep2&gt;
requires detail&colon;&colon;InvocableQuantities&lt;std&colon;&colon;multiplies&lt;&gt;, quantity, quantity&lt;R2, Rep2&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_star-08dc[operator&ast;](
    Q const& lhs,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& rhs);
----

[.small]#link:#mp_units-operator_star-08dc[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdQ,
    link:#mp_units-Reference[Reference] R,
    link:#mp_units-Quantity[Quantity] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_star-022[operator&ast;](
    FwdQ&& q,
    R rhs);
----

[.small]#link:#mp_units-operator_star-022[_» more&period;&period;&period;_]#

Multiplication operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdRep,
    link:#mp_units-Reference[Reference] R,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;get&lowbar;quantity&lowbar;spec(R&lcub;&rcub;)&gt;] Rep = std::remove&lowbar;cvref&lowbar;t&lt;FwdRep&gt;&gt;
requires (!detail&colon;&colon;OffsetUnit&lt;decltype(get&lowbar;unit(R&lcub;&rcub;))&gt;)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01[quantity&lt;R&lcub;&rcub;, Rep&gt;]
link:#mp_units-operator_star-07[operator&ast;](
    FwdRep&& lhs,
    R r);
----

[.small]#link:#mp_units-operator_star-07[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdRep,
    link:#mp_units-Reference[Reference] R,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;get&lowbar;quantity&lowbar;spec(R&lcub;&rcub;)&gt;] Rep = std::remove&lowbar;cvref&lowbar;t&lt;FwdRep&gt;&gt;
requires detail&colon;&colon;OffsetUnit&lt;decltype(get&lowbar;unit(R&lcub;&rcub;))&gt;
&lsqb;&lsqb;deprecated&rsqb;&rsqb;
constexpr
auto
link:#mp_units-operator_star-01[operator&ast;](
    FwdRep&& lhs,
    R r);
----

[.small]#link:#mp_units-operator_star-01[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-AssociatedUnit[AssociatedUnit] U1&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
operator&ast;(
    U1 lhs,
    link:#mp_units-reference[reference] rhs);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-AssociatedUnit[AssociatedUnit] U2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
operator&ast;(
    link:#mp_units-reference[reference] lhs,
    U2 rhs);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Reference[Reference] R,
    typename Q&gt;
requires Quantity&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;Q&gt;&gt;
constexpr
auto
operator&ast;(
    R lhs,
    Q&& q) = delete;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Reference[Reference] R,
    typename Rep&gt;
requires RepresentationOf&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;Rep&gt;, get&lowbar;quantity&lowbar;spec(R&lcub;&rcub;)&gt;
constexpr
auto
operator&ast;(
    R lhs,
    Rep&& rhs) = delete;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Q2,
    typename U2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
operator&ast;(
    link:#mp_units-reference[reference] lhs,
    link:#mp_units-reference[reference&lt;Q2, U2&gt;] rhs);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    typename Value&gt;
requires (!Quantity&lt;Value&gt;) &amp;&amp;
            (!Reference&lt;Value&gt;) &amp;&amp; detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;multiplies&lt;&gt;, rep, const Value&amp;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
operator&ast;(
    Q const& q,
    Value const& val);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Value,
    std::derived&lowbar;from&lt;quantity&gt; Q&gt;
requires (!Quantity&lt;Value&gt;) &amp;&amp;
            (!Reference&lt;Value&gt;) &amp;&amp; detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;multiplies&lt;&gt;, const Value&amp;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
operator&ast;(
    Value const& val,
    Q const& q);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    auto R2,
    typename Rep2&gt;
requires detail&colon;&colon;InvocableQuantities&lt;std&colon;&colon;multiplies&lt;&gt;, quantity, quantity&lt;R2, Rep2&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator&ast;(
    Q const& lhs,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& rhs);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdQ,
    link:#mp_units-Reference[Reference] R,
    link:#mp_units-Quantity[Quantity] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator&ast;(
    FwdQ&& q,
    R rhs);
----

Multiplication operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdRep,
    link:#mp_units-Reference[Reference] R,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;get&lowbar;quantity&lowbar;spec(R&lcub;&rcub;)&gt;] Rep = std::remove&lowbar;cvref&lowbar;t&lt;FwdRep&gt;&gt;
requires (!detail&colon;&colon;OffsetUnit&lt;decltype(get&lowbar;unit(R&lcub;&rcub;))&gt;)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01[quantity&lt;R&lcub;&rcub;, Rep&gt;]
operator&ast;(
    FwdRep&& lhs,
    R r);
----

== Return Value

A quantity

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *r*
| The right operand
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdRep,
    link:#mp_units-Reference[Reference] R,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;get&lowbar;quantity&lowbar;spec(R&lcub;&rcub;)&gt;] Rep = std::remove&lowbar;cvref&lowbar;t&lt;FwdRep&gt;&gt;
requires detail&colon;&colon;OffsetUnit&lt;decltype(get&lowbar;unit(R&lcub;&rcub;))&gt;
&lsqb;&lsqb;deprecated&rsqb;&rsqb;
constexpr
auto
operator&ast;(
    FwdRep&& lhs,
    R r);
----

Addition operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

Addition operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, 1 &plus; N&gt;]
link:#mp_units-operator_plus-07[operator&plus;](
    CharT const lhs,
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& rhs) noexcept;
----

[.small]#link:#mp_units-operator_plus-07[_» more&period;&period;&period;_]#

Addition operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N &plus; 1&gt;]
link:#mp_units-operator_plus-0e3[operator&plus;](
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& lhs,
    CharT rhs) noexcept;
----

[.small]#link:#mp_units-operator_plus-0e3[_» more&period;&period;&period;_]#

Addition operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N &plus; N2&gt;]
link:#mp_units-operator_plus-0e6[operator&plus;](
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& lhs,
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N2&gt;] const& rhs) noexcept;
----

[.small]#link:#mp_units-operator_plus-0e6[_» more&period;&period;&period;_]#

Addition operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N &plus; N2 &hyphen; 1&gt;]
link:#mp_units-operator_plus-0ec[operator&plus;](
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& lhs,
    CharT const(& rhs)[]) noexcept;
----

[.small]#link:#mp_units-operator_plus-0ec[_» more&period;&period;&period;_]#

Addition operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N1&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N1 &plus; N &hyphen; 1&gt;]
link:#mp_units-operator_plus-067[operator&plus;](
    CharT const(& lhs)[],
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& rhs) noexcept;
----

[.small]#link:#mp_units-operator_plus-067[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] Value&gt;
requires detail&colon;&colon;DimensionlessOne&lt;Q&colon;&colon;reference&gt; &amp;&amp;
             detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;plus&lt;&gt;, Rep, const Value&amp;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_plus-0f[operator&plus;](
    Q const& lhs,
    Value const& rhs);
----

[.small]#link:#mp_units-operator_plus-0f[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] Value&gt;
requires detail&colon;&colon;DimensionlessOne&lt;Q&colon;&colon;reference&gt; &amp;&amp;
             detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;plus&lt;&gt;, Rep, const Value&amp;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_plus-0b[operator&plus;](
    Value const& lhs,
    Q const& rhs);
----

[.small]#link:#mp_units-operator_plus-0b[_» more&period;&period;&period;_]#

Addition operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::size&lowbar;t N2,
    std::size&lowbar;t M2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;N &plus; N2, M &plus; M2&gt;]
link:#mp_units-operator_plus-0e1[operator&plus;](
    link:#mp_units-symbol_text-032[symbol&lowbar;text] const& lhs,
    link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;N2, M2&gt;] const& rhs);
----

[.small]#link:#mp_units-operator_plus-0e1[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    auto R2,
    typename Rep2&gt;
requires detail&colon;&colon;CommonlyInvocableQuantities&lt;std&colon;&colon;plus&lt;&gt;, quantity, quantity&lt;R2, Rep2&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_plus-06d[operator&plus;](
    Q const& lhs,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& rhs);
----

[.small]#link:#mp_units-operator_plus-06d[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&lowbar;point&gt; QP,
    link:#mp_units-ReferenceOf[ReferenceOf&lt;PO&period;&lowbar;quantity&lowbar;spec&lowbar;&gt;] auto R2,
    typename Rep2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
link:#mp_units-operator_plus-0a5[operator&plus;](
    QP const& qp,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& q)
requires requires &lcub; qp&period;quantity&lowbar;ref&lowbar;from(PO) &plus; q&semi; &rcub;;
----

[.small]#link:#mp_units-operator_plus-0a5[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-ReferenceOf[ReferenceOf&lt;PO&period;&lowbar;quantity&lowbar;spec&lowbar;&gt;] auto R1,
    typename Rep1,
    std::derived&lowbar;from&lt;quantity&lowbar;point&gt; QP&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
link:#mp_units-operator_plus-00[operator&plus;](
    link:#mp_units-quantity-01[quantity&lt;R1, Rep1&gt;] const& q,
    QP const& qp)
requires requires &lcub; q &plus; qp&period;quantity&lowbar;ref&lowbar;from(PO)&semi; &rcub;;
----

[.small]#link:#mp_units-operator_plus-00[_» more&period;&period;&period;_]#

Addition operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, 1 &plus; N&gt;]
operator&plus;(
    CharT const lhs,
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& rhs) noexcept;
----

== Return Value

A compile&hyphen;time fixed string

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Addition operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N &plus; 1&gt;]
operator&plus;(
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& lhs,
    CharT rhs) noexcept;
----

== Return Value

A compile&hyphen;time fixed string

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Addition operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N &plus; N2&gt;]
operator&plus;(
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& lhs,
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N2&gt;] const& rhs) noexcept;
----

== Return Value

A compile&hyphen;time fixed string

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Addition operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N &plus; N2 &hyphen; 1&gt;]
operator&plus;(
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& lhs,
    CharT const(& rhs)[]) noexcept;
----

== Return Value

A compile&hyphen;time fixed string

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Addition operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N1&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N1 &plus; N &hyphen; 1&gt;]
operator&plus;(
    CharT const(& lhs)[],
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& rhs) noexcept;
----

== Return Value

A compile&hyphen;time fixed string

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] Value&gt;
requires detail&colon;&colon;DimensionlessOne&lt;Q&colon;&colon;reference&gt; &amp;&amp;
             detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;plus&lt;&gt;, Rep, const Value&amp;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator&plus;(
    Q const& lhs,
    Value const& rhs);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] Value&gt;
requires detail&colon;&colon;DimensionlessOne&lt;Q&colon;&colon;reference&gt; &amp;&amp;
             detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;plus&lt;&gt;, Rep, const Value&amp;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator&plus;(
    Value const& lhs,
    Q const& rhs);
----

Addition operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::size&lowbar;t N2,
    std::size&lowbar;t M2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;N &plus; N2, M &plus; M2&gt;]
operator&plus;(
    link:#mp_units-symbol_text-032[symbol&lowbar;text] const& lhs,
    link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;N2, M2&gt;] const& rhs);
----

== Return Value

A symbol text representation

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    auto R2,
    typename Rep2&gt;
requires detail&colon;&colon;CommonlyInvocableQuantities&lt;std&colon;&colon;plus&lt;&gt;, quantity, quantity&lt;R2, Rep2&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator&plus;(
    Q const& lhs,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& rhs);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&lowbar;point&gt; QP,
    link:#mp_units-ReferenceOf[ReferenceOf&lt;PO&period;&lowbar;quantity&lowbar;spec&lowbar;&gt;] auto R2,
    typename Rep2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
operator&plus;(
    QP const& qp,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& q)
requires requires &lcub; qp&period;quantity&lowbar;ref&lowbar;from(PO) &plus; q&semi; &rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-ReferenceOf[ReferenceOf&lt;PO&period;&lowbar;quantity&lowbar;spec&lowbar;&gt;] auto R1,
    typename Rep1,
    std::derived&lowbar;from&lt;quantity&lowbar;point&gt; QP&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
operator&plus;(
    link:#mp_units-quantity-01[quantity&lt;R1, Rep1&gt;] const& q,
    QP const& qp)
requires requires &lcub; q &plus; qp&period;quantity&lowbar;ref&lowbar;from(PO)&semi; &rcub;;
----

Subtraction operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-PointOrigin[PointOrigin] PO1,
    std::derived&lowbar;from&lt;quantity&lowbar;point&gt; QP&gt;
requires QuantityPointOf&lt;quantity&lowbar;point, PO1&lcub;&rcub;&gt; &amp;&amp;
             ReferenceOf&lt;MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(reference), PO1&colon;&colon;&lowbar;quantity&lowbar;spec&lowbar;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_minus-075[operator&hyphen;](
    PO1 po,
    QP const& qp);
----

[.small]#link:#mp_units-operator_minus-075[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] Value&gt;
requires detail&colon;&colon;DimensionlessOne&lt;Q&colon;&colon;reference&gt; &amp;&amp;
             detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;minus&lt;&gt;, Rep, const Value&amp;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_minus-0a[operator&hyphen;](
    Q const& lhs,
    Value const& rhs);
----

[.small]#link:#mp_units-operator_minus-0a[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&lowbar;point&gt; QP,
    link:#mp_units-QuantityPointOf[QuantityPointOf&lt;absolute&lowbar;point&lowbar;origin&gt;] QP2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_minus-06[operator&hyphen;](
    QP const& lhs,
    QP2 const& rhs)
requires requires &lcub; lhs&period;quantity&lowbar;ref&lowbar;from(point&lowbar;origin) &hyphen; rhs&period;quantity&lowbar;ref&lowbar;from(QP2&colon;&colon;point&lowbar;origin)&semi; &rcub;;
----

[.small]#link:#mp_units-operator_minus-06[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&lowbar;point&gt; QP,
    link:#mp_units-PointOrigin[PointOrigin] PO2&gt;
requires QuantityPointOf&lt;quantity&lowbar;point, PO2&lcub;&rcub;&gt; &amp;&amp;
             ReferenceOf&lt;MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(reference), PO2&colon;&colon;&lowbar;quantity&lowbar;spec&lowbar;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_minus-00[operator&hyphen;](
    QP const& qp,
    PO2 po);
----

[.small]#link:#mp_units-operator_minus-00[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] Value&gt;
requires detail&colon;&colon;DimensionlessOne&lt;Q&colon;&colon;reference&gt; &amp;&amp;
             detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;minus&lt;&gt;, Rep, const Value&amp;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_minus-079[operator&hyphen;](
    Value const& lhs,
    Q const& rhs);
----

[.small]#link:#mp_units-operator_minus-079[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    auto R2,
    typename Rep2&gt;
requires detail&colon;&colon;CommonlyInvocableQuantities&lt;std&colon;&colon;minus&lt;&gt;, quantity, quantity&lt;R2, Rep2&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_minus-03[operator&hyphen;](
    Q const& lhs,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& rhs);
----

[.small]#link:#mp_units-operator_minus-03[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&lowbar;point&gt; QP,
    link:#mp_units-ReferenceOf[ReferenceOf&lt;PO&period;&lowbar;quantity&lowbar;spec&lowbar;&gt;] auto R2,
    typename Rep2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
link:#mp_units-operator_minus-05[operator&hyphen;](
    QP const& qp,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& q)
requires requires &lcub; qp&period;quantity&lowbar;ref&lowbar;from(PO) &hyphen; q&semi; &rcub;;
----

[.small]#link:#mp_units-operator_minus-05[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-PointOrigin[PointOrigin] PO1,
    std::derived&lowbar;from&lt;quantity&lowbar;point&gt; QP&gt;
requires QuantityPointOf&lt;quantity&lowbar;point, PO1&lcub;&rcub;&gt; &amp;&amp;
             ReferenceOf&lt;MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(reference), PO1&colon;&colon;&lowbar;quantity&lowbar;spec&lowbar;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator&hyphen;(
    PO1 po,
    QP const& qp);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] Value&gt;
requires detail&colon;&colon;DimensionlessOne&lt;Q&colon;&colon;reference&gt; &amp;&amp;
             detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;minus&lt;&gt;, Rep, const Value&amp;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator&hyphen;(
    Q const& lhs,
    Value const& rhs);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&lowbar;point&gt; QP,
    link:#mp_units-QuantityPointOf[QuantityPointOf&lt;absolute&lowbar;point&lowbar;origin&gt;] QP2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator&hyphen;(
    QP const& lhs,
    QP2 const& rhs)
requires requires &lcub; lhs&period;quantity&lowbar;ref&lowbar;from(point&lowbar;origin) &hyphen; rhs&period;quantity&lowbar;ref&lowbar;from(QP2&colon;&colon;point&lowbar;origin)&semi; &rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&lowbar;point&gt; QP,
    link:#mp_units-PointOrigin[PointOrigin] PO2&gt;
requires QuantityPointOf&lt;quantity&lowbar;point, PO2&lcub;&rcub;&gt; &amp;&amp;
             ReferenceOf&lt;MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(reference), PO2&colon;&colon;&lowbar;quantity&lowbar;spec&lowbar;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator&hyphen;(
    QP const& qp,
    PO2 po);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] Value&gt;
requires detail&colon;&colon;DimensionlessOne&lt;Q&colon;&colon;reference&gt; &amp;&amp;
             detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;minus&lt;&gt;, Rep, const Value&amp;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator&hyphen;(
    Value const& lhs,
    Q const& rhs);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    auto R2,
    typename Rep2&gt;
requires detail&colon;&colon;CommonlyInvocableQuantities&lt;std&colon;&colon;minus&lt;&gt;, quantity, quantity&lt;R2, Rep2&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator&hyphen;(
    Q const& lhs,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& rhs);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&lowbar;point&gt; QP,
    link:#mp_units-ReferenceOf[ReferenceOf&lt;PO&period;&lowbar;quantity&lowbar;spec&lowbar;&gt;] auto R2,
    typename Rep2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
operator&hyphen;(
    QP const& qp,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& q)
requires requires &lcub; qp&period;quantity&lowbar;ref&lowbar;from(PO) &hyphen; q&semi; &rcub;;
----

Division operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-AssociatedUnit[AssociatedUnit] U1&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
link:#mp_units-operator_slash-0d6[operator&sol;](
    U1 lhs,
    link:#mp_units-reference[reference] rhs);
----

[.small]#link:#mp_units-operator_slash-0d6[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-AssociatedUnit[AssociatedUnit] U2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
link:#mp_units-operator_slash-0e[operator&sol;](
    link:#mp_units-reference[reference] lhs,
    U2 rhs);
----

[.small]#link:#mp_units-operator_slash-0e[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Reference[Reference] R,
    typename Q&gt;
requires Quantity&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;Q&gt;&gt;
constexpr
auto
link:#mp_units-operator_slash-0c[operator&sol;](
    R lhs,
    Q&& q) = delete;
----

[.small]#link:#mp_units-operator_slash-0c[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Reference[Reference] R,
    typename Rep&gt;
requires RepresentationOf&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;Rep&gt;, get&lowbar;quantity&lowbar;spec(R&lcub;&rcub;)&gt;
constexpr
auto
link:#mp_units-operator_slash-0b[operator&sol;](
    R lhs,
    Rep&& rhs) = delete;
----

[.small]#link:#mp_units-operator_slash-0b[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Q2,
    typename U2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
link:#mp_units-operator_slash-0d3[operator&sol;](
    link:#mp_units-reference[reference] lhs,
    link:#mp_units-reference[reference&lt;Q2, U2&gt;] rhs);
----

[.small]#link:#mp_units-operator_slash-0d3[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    typename Value&gt;
requires (!Quantity&lt;Value&gt;) &amp;&amp;
            (!Reference&lt;Value&gt;) &amp;&amp; detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;divides&lt;&gt;, rep, const Value&amp;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
link:#mp_units-operator_slash-09[operator&sol;](
    Q const& q,
    Value const& val);
----

[.small]#link:#mp_units-operator_slash-09[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Value,
    std::derived&lowbar;from&lt;quantity&gt; Q&gt;
requires (!Quantity&lt;Value&gt;) &amp;&amp;
            (!Reference&lt;Value&gt;) &amp;&amp; detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;divides&lt;&gt;, const Value&amp;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_slash-0ad[operator&sol;](
    Value const& val,
    Q const& q);
----

[.small]#link:#mp_units-operator_slash-0ad[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    auto R2,
    typename Rep2&gt;
requires detail&colon;&colon;InvocableQuantities&lt;std&colon;&colon;divides&lt;&gt;, quantity, quantity&lt;R2, Rep2&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_slash-05[operator&sol;](
    Q const& lhs,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& rhs);
----

[.small]#link:#mp_units-operator_slash-05[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdQ,
    link:#mp_units-Reference[Reference] R,
    link:#mp_units-Quantity[Quantity] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_slash-08[operator&sol;](
    FwdQ&& q,
    R rhs);
----

[.small]#link:#mp_units-operator_slash-08[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdRep,
    link:#mp_units-Reference[Reference] R,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;get&lowbar;quantity&lowbar;spec(R&lcub;&rcub;)&gt;] Rep = std::remove&lowbar;cvref&lowbar;t&lt;FwdRep&gt;&gt;
requires (!detail&colon;&colon;OffsetUnit&lt;decltype(get&lowbar;unit(R&lcub;&rcub;))&gt;)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-operator_slash-03[operator&sol;](
    FwdRep&& lhs,
    R rhs);
----

[.small]#link:#mp_units-operator_slash-03[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdRep,
    link:#mp_units-Reference[Reference] R,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;get&lowbar;quantity&lowbar;spec(R&lcub;&rcub;)&gt;] Rep = std::remove&lowbar;cvref&lowbar;t&lt;FwdRep&gt;&gt;
requires detail&colon;&colon;OffsetUnit&lt;decltype(get&lowbar;unit(R&lcub;&rcub;))&gt;
&lsqb;&lsqb;deprecated&rsqb;&rsqb;
constexpr
auto
link:#mp_units-operator_slash-06[operator&sol;](
    FwdRep&& lhs,
    R rhs);
----

[.small]#link:#mp_units-operator_slash-06[_» more&period;&period;&period;_]#

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-AssociatedUnit[AssociatedUnit] U1&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
operator&sol;(
    U1 lhs,
    link:#mp_units-reference[reference] rhs);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-AssociatedUnit[AssociatedUnit] U2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
operator&sol;(
    link:#mp_units-reference[reference] lhs,
    U2 rhs);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Reference[Reference] R,
    typename Q&gt;
requires Quantity&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;Q&gt;&gt;
constexpr
auto
operator&sol;(
    R lhs,
    Q&& q) = delete;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Reference[Reference] R,
    typename Rep&gt;
requires RepresentationOf&lt;std&colon;&colon;remove&lowbar;cvref&lowbar;t&lt;Rep&gt;, get&lowbar;quantity&lowbar;spec(R&lcub;&rcub;)&gt;
constexpr
auto
operator&sol;(
    R lhs,
    Rep&& rhs) = delete;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Q2,
    typename U2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
operator&sol;(
    link:#mp_units-reference[reference] lhs,
    link:#mp_units-reference[reference&lt;Q2, U2&gt;] rhs);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    typename Value&gt;
requires (!Quantity&lt;Value&gt;) &amp;&amp;
            (!Reference&lt;Value&gt;) &amp;&amp; detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;divides&lt;&gt;, rep, const Value&amp;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;quantity&lowbar;spec&gt;] auto
operator&sol;(
    Q const& q,
    Value const& val);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Value,
    std::derived&lowbar;from&lt;quantity&gt; Q&gt;
requires (!Quantity&lt;Value&gt;) &amp;&amp;
            (!Reference&lt;Value&gt;) &amp;&amp; detail&colon;&colon;InvokeResultOf&lt;quantity&lowbar;spec, std&colon;&colon;divides&lt;&gt;, const Value&amp;, rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator&sol;(
    Value const& val,
    Q const& q);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    auto R2,
    typename Rep2&gt;
requires detail&colon;&colon;InvocableQuantities&lt;std&colon;&colon;divides&lt;&gt;, quantity, quantity&lt;R2, Rep2&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator&sol;(
    Q const& lhs,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& rhs);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdQ,
    link:#mp_units-Reference[Reference] R,
    link:#mp_units-Quantity[Quantity] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator&sol;(
    FwdQ&& q,
    R rhs);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdRep,
    link:#mp_units-Reference[Reference] R,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;get&lowbar;quantity&lowbar;spec(R&lcub;&rcub;)&gt;] Rep = std::remove&lowbar;cvref&lowbar;t&lt;FwdRep&gt;&gt;
requires (!detail&colon;&colon;OffsetUnit&lt;decltype(get&lowbar;unit(R&lcub;&rcub;))&gt;)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
operator&sol;(
    FwdRep&& lhs,
    R rhs);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename FwdRep,
    link:#mp_units-Reference[Reference] R,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;get&lowbar;quantity&lowbar;spec(R&lcub;&rcub;)&gt;] Rep = std::remove&lowbar;cvref&lowbar;t&lt;FwdRep&gt;&gt;
requires detail&colon;&colon;OffsetUnit&lt;decltype(get&lowbar;unit(R&lcub;&rcub;))&gt;
&lsqb;&lsqb;deprecated&rsqb;&rsqb;
constexpr
auto
operator&sol;(
    FwdRep&& lhs,
    R rhs);
----

`pow` overloads

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&period;h&gt;`

Computes the value of a reference raised to the `Num&sol;Den` power


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    intmax&lowbar;t Num,
    intmax&lowbar;t Den = 1&gt;
requires (Den !&equals; 0)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
link:#mp_units-pow-0b[pow](link:#mp_units-reference[reference]);
----

[.small]#link:#mp_units-pow-0b[_» more&period;&period;&period;_]#

Computes the value of a dimension raised to the `Num&sol;Den` power


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    intmax&lowbar;t Num,
    intmax&lowbar;t Den = 1,
    link:#mp_units-Unit[Unit] D&gt;
requires (Den !&equals; 0)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
link:#mp_units-pow-07[pow](D d);
----

[.small]#link:#mp_units-pow-07[_» more&period;&period;&period;_]#

Computes the value of a quantity raised to the `Num&sol;Den` power


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    intmax&lowbar;t Num,
    intmax&lowbar;t Den = 1,
    auto R,
    typename Rep&gt;
requires (Den !&equals; 0) &amp;&amp; requires(Rep v) &lcub;
    representation&lowbar;values&lt;Rep&gt;&colon;&colon;one()&semi;
    requires requires &lcub; pow(v, 1&period;0)&semi; &rcub; &verbar;&verbar; requires &lcub; std&colon;&colon;pow(v, 1&period;0)&semi; &rcub;&semi;
  &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01[quantity&lt;pow&lt;Num, Den&gt;(R), Rep&gt;]
link:#mp_units-pow-05[pow](link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& q) noexcept;
----

[.small]#link:#mp_units-pow-05[_» more&period;&period;&period;_]#

== Return Value

* The result of computation
* Dimension The result of computation
* QuantitySpec The result of computation
* Unit The result of computation
* Quantity The result of computation

== Template Parameters

[cols=2]
|===
| Name
| Description
| *Num*
| Exponent numerator
| *Den*
| Exponent denominator
|===

== Parameters

[cols=2]
|===
| Name
| Description
| *r*
| Reference being the base of the operation
| *d*
| Dimension being the base of the operation
| *q*
| Quantity specification being the base of the operation
| *u*
| Unit being the base of the operation
|===

Computes the value of a reference raised to the `Num&sol;Den` power

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    intmax&lowbar;t Num,
    intmax&lowbar;t Den = 1&gt;
requires (Den !&equals; 0)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
pow(link:#mp_units-reference[reference]);
----

== Return Value

The result of computation

== Template Parameters

[cols=2]
|===
| Name
| Description
| *Num*
| Exponent numerator
| *Den*
| Exponent denominator
|===

== Parameters

[cols=2]
|===
| Name
| Description
| *r*
| Reference being the base of the operation
|===

Computes the value of a dimension raised to the `Num&sol;Den` power

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    intmax&lowbar;t Num,
    intmax&lowbar;t Den = 1,
    link:#mp_units-Unit[Unit] D&gt;
requires (Den !&equals; 0)
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
pow(D d);
----

== Return Value

* Dimension The result of computation
* QuantitySpec The result of computation
* Unit The result of computation

== Template Parameters

[cols=2]
|===
| Name
| Description
| *Num*
| Exponent numerator
| *Den*
| Exponent denominator
|===

== Parameters

[cols=2]
|===
| Name
| Description
| *d*
| Dimension being the base of the operation
| *q*
| Quantity specification being the base of the operation
| *u*
| Unit being the base of the operation
|===

Computes the value of a quantity raised to the `Num&sol;Den` power

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    intmax&lowbar;t Num,
    intmax&lowbar;t Den = 1,
    auto R,
    typename Rep&gt;
requires (Den !&equals; 0) &amp;&amp; requires(Rep v) &lcub;
    representation&lowbar;values&lt;Rep&gt;&colon;&colon;one()&semi;
    requires requires &lcub; pow(v, 1&period;0)&semi; &rcub; &verbar;&verbar; requires &lcub; std&colon;&colon;pow(v, 1&period;0)&semi; &rcub;&semi;
  &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01[quantity&lt;pow&lt;Num, Den&gt;(R), Rep&gt;]
pow(link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& q) noexcept;
----

== Description

Both the quantity value and its quantity specification are the base of the operation&period;

== Return Value

Quantity The result of computation

== Template Parameters

[cols=2]
|===
| Name
| Description
| *Num*
| Exponent numerator
| *Den*
| Exponent denominator
|===

== Parameters

[cols=2]
|===
| Name
| Description
| *q*
| Quantity being the base of the operation
|===

`quantity&lowbar;cast` overloads

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;cast&period;h&gt;`

Explicit cast of a quantity type


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-QuantitySpec[QuantitySpec] auto ToQS,
    typename FwdQ,
    link:#mp_units-Quantity[Quantity] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires (castable(Q&colon;&colon;quantity&lowbar;spec, ToQS)) &amp;&amp; (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(Q&colon;&colon;unit), ToQS))
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-quantity_cast-0b[quantity&lowbar;cast](FwdQ&& q);
----

[.small]#link:#mp_units-quantity_cast-0b[_» more&period;&period;&period;_]#

Explicit cast of a quantity point type


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-QuantitySpec[QuantitySpec] auto ToQS,
    typename FwdQP,
    link:#mp_units-QuantityPoint[QuantityPoint] QP = std::remove&lowbar;cvref&lowbar;t&lt;FwdQP&gt;&gt;
requires (castable(QP&colon;&colon;quantity&lowbar;spec, ToQS)) &amp;&amp; (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(QP&colon;&colon;unit), ToQS))
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
link:#mp_units-quantity_cast-08[quantity&lowbar;cast](FwdQP&& qp);
----

[.small]#link:#mp_units-quantity_cast-08[_» more&period;&period;&period;_]#

== Template Parameters

[cols=2]
|===
| Name
| Description
| *ToQS*
| a quantity specification to use for a target quantity
|===

Explicit cast of a quantity type

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;cast&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-QuantitySpec[QuantitySpec] auto ToQS,
    typename FwdQ,
    link:#mp_units-Quantity[Quantity] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires (castable(Q&colon;&colon;quantity&lowbar;spec, ToQS)) &amp;&amp; (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(Q&colon;&colon;unit), ToQS))
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
quantity&lowbar;cast(FwdQ&& q);
----

== Description

This cast converts only a quantity type&period; It might be used to force some quantity type conversions that are not implicitly allowed but are allowed explicitly&period;

For example&colon;

[,cpp]
----
{.cpp}
 auto length = isq::length(42 * m);
 auto distance = quantity_cast<isq::distance>(length);
----
[NOTE]
====
This cast does not affect the underlying value of a number stored in a quantity&period;

====

== Template Parameters

[cols=2]
|===
| Name
| Description
| *ToQS*
| a quantity specification to use for a target quantity
|===

Explicit cast of a quantity point type

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;cast&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-QuantitySpec[QuantitySpec] auto ToQS,
    typename FwdQP,
    link:#mp_units-QuantityPoint[QuantityPoint] QP = std::remove&lowbar;cvref&lowbar;t&lt;FwdQP&gt;&gt;
requires (castable(QP&colon;&colon;quantity&lowbar;spec, ToQS)) &amp;&amp; (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(QP&colon;&colon;unit), ToQS))
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
quantity&lowbar;cast(FwdQP&& qp);
----

== Description

This cast converts only a quantity point type&period; It might be used to force some quantity point type conversions that are not implicitly allowed but are allowed explicitly&period;

For example&colon;

[,cpp]
----
{.cpp}
 auto length = isq::length(quantity_point{42 * m});
 auto altitude = quantity_cast<isq::altitude>(length);
----
[NOTE]
====
This cast does not affect the underlying value of a number stored in a quantity point&period;

====

== Template Parameters

[cols=2]
|===
| Name
| Description
| *ToQS*
| a quantity specification to use for a target quantity point
|===

Computes the IEEE remainder of the floating point division operation x &sol; y&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R1,
    typename Rep1,
    auto R2,
    typename Rep2&gt;
requires requires(Rep1 v1, Rep2 v2) &lcub;
    get&lowbar;common&lowbar;reference(R1, R2)&semi;
    requires requires &lcub; remainder(v1, v2)&semi; &rcub; &verbar;&verbar; requires &lcub; std&colon;&colon;remainder(v1, v2)&semi; &rcub;&semi;
  &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityOf[QuantityOf&lt;get&lowbar;quantity&lowbar;spec(R1)&gt;] auto
remainder(
    link:#mp_units-quantity-01[quantity&lt;R1, Rep1&gt;] const& x,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& y) noexcept;
----

== Parameters

[cols=2]
|===
| Name
| Description
| *x*
| A quantity
| *y*
| A quantity
|===

Computes the nearest quantity with integer representation and unit type `To` to `q`

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit] auto To,
    auto R,
    typename Rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01[quantity&lt;detail&colon;&colon;clone&lowbar;reference&lowbar;with&lt;To&gt;(R), Rep&gt;]
round(link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& q) noexcept
requires requires &lcub;
    mp&lowbar;units&colon;&colon;floor&lt;To&gt;(q)&semi;
    representation&lowbar;values&lt;Rep&gt;&colon;&colon;one()&semi;
  &rcub; &amp;&amp; std&colon;&colon;constructible&lowbar;from&lt;std&colon;&colon;int64&lowbar;t, Rep&gt;;
----

== Description

Returns the value `res` representable in `To` unit that is the closest to `q`&period; If there are two such values, returns the even value (that is, the value `res` such that `res % 2 &equals;&equals; 0`)&period;

== Return Value

Quantity The quantity rounded to the nearest unit `To`, rounding to even in halfway cases&period;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *q*
| Quantity being the base of the operation
|===

== Parameters

[cols=2]
|===
| Name
| Description
| *q*
| A quantity
|===

`sqrt` overloads

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&period;h&gt;`

Computes the square root of a dimension


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
link:#mp_units-sqrt-09[sqrt](auto d);
----

[.small]#link:#mp_units-sqrt-09[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
link:#mp_units-sqrt-0f[sqrt](link:#mp_units-reference[reference]);
----

[.small]#link:#mp_units-sqrt-0f[_» more&period;&period;&period;_]#

Computes the square root of a quantity


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    typename Rep&gt;
requires requires(Rep v) &lcub; sqrt(v)&semi; &rcub; &verbar;&verbar; requires(Rep v) &lcub; std&colon;&colon;sqrt(v)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01[quantity&lt;sqrt(R), Rep&gt;]
link:#mp_units-sqrt-0b[sqrt](link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& q) noexcept;
----

[.small]#link:#mp_units-sqrt-0b[_» more&period;&period;&period;_]#

== Return Value

* Dimension The result of computation
* QuantitySpec The result of computation
* Unit The result of computation
* Quantity The result of computation

== Parameters

[cols=2]
|===
| Name
| Description
| *d*
| Dimension being the base of the operation
| *q*
| Quantity specification being the base of the operation
| *u*
| Unit being the base of the operation
|===

Computes the square root of a dimension

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-QuantitySpec[QuantitySpec] auto
sqrt(auto d);
----

== Return Value

* Dimension The result of computation
* QuantitySpec The result of computation
* Unit The result of computation

== Parameters

[cols=2]
|===
| Name
| Description
| *d*
| Dimension being the base of the operation
| *q*
| Quantity specification being the base of the operation
| *u*
| Unit being the base of the operation
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
&sol;&ast; implementation-defined &ast;&sol;
sqrt(link:#mp_units-reference[reference]);
----

Computes the square root of a quantity

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;math&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto R,
    typename Rep&gt;
requires requires(Rep v) &lcub; sqrt(v)&semi; &rcub; &verbar;&verbar; requires(Rep v) &lcub; std&colon;&colon;sqrt(v)&semi; &rcub;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01[quantity&lt;sqrt(R), Rep&gt;]
sqrt(link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& q) noexcept;
----

== Description

Both the quantity value and its quantity specification are the base of the operation&period;

== Return Value

Quantity The result of computation

== Parameters

[cols=2]
|===
| Name
| Description
| *q*
| Quantity being the base of the operation
|===

Computes the square power of a unit

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
link:#mp_units-Unit[Unit] auto
square(auto u);
----

== Return Value

Unit The result of computation

== Parameters

[cols=2]
|===
| Name
| Description
| *u*
| Unit being the base of the operation
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class CharT,
    std::size&lowbar;t N&gt;
constexpr
void
swap(
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N&gt;]& x,
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N&gt;]& y) noexcept;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-unit_symbol_formatting[unit&lowbar;symbol&lowbar;formatting] fmt = unit&lowbar;symbol&lowbar;formatting&lcub;&rcub;,
    typename CharT = char,
    link:#mp_units-Unit[Unit] U&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
std::basic&lowbar;string&lowbar;view&lt;CharT&gt;
unit&lowbar;symbol(U);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename CharT = char,
    std::output&lowbar;iterator&lt;CharT&gt; Out,
    link:#mp_units-Unit[Unit] U&gt;
constexpr
Out
unit&lowbar;symbol&lowbar;to(
    Out out,
    U u,
    link:#mp_units-unit_symbol_formatting[unit&lowbar;symbol&lowbar;formatting] const& fmt = unit&lowbar;symbol&lowbar;formatting&lcub;&rcub;);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector]
unit&lowbar;vector(link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector] const& vec)
requires treat&lowbar;as&lowbar;floating&lowbar;point&lt;T&gt;;
----

`value&lowbar;cast` overloads

== Synopses

Declared in `&lt;mp&hyphen;units&sol;framework&sol;value&lowbar;cast&period;h&gt;`

Explicit cast of a quantity&apos;s representation


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Quantity[Quantity] ToQ,
    typename FwdQ,
    link:#mp_units-Quantity[Quantity] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires (ToQ&colon;&colon;quantity&lowbar;spec &equals;&equals; Q&colon;&colon;quantity&lowbar;spec) &amp;&amp;
          (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(ToQ&colon;&colon;unit), Q&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          std&colon;&colon;constructible&lowbar;from&lt;typename ToQ&colon;&colon;rep, typename Q&colon;&colon;rep&gt; &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;Q&colon;&colon;unit, ToQ&colon;&colon;unit, typename ToQ&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-value_cast-029[value&lowbar;cast](FwdQ&& q);
----

[.small]#link:#mp_units-value_cast-029[_» more&period;&period;&period;_]#

Explicit cast of a quantity&apos;s representation type


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename ToRep,
    typename FwdQ,
    link:#mp_units-Quantity[Quantity] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires RepresentationOf&lt;ToRep, Q&colon;&colon;quantity&lowbar;spec&gt; &amp;&amp; std&colon;&colon;constructible&lowbar;from&lt;ToRep, typename Q&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01[quantity&lt;Q&colon;&colon;reference, ToRep&gt;]
link:#mp_units-value_cast-0e[value&lowbar;cast](FwdQ&& q);
----

[.small]#link:#mp_units-value_cast-0e[_» more&period;&period;&period;_]#

Explicit cast of a quantity&apos;s unit


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto ToU,
    typename FwdQ,
    link:#mp_units-Quantity[Quantity] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(ToU)), Q&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;Q&colon;&colon;unit, ToU, typename Q&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-value_cast-0d[value&lowbar;cast](FwdQ&& q);
----

[.small]#link:#mp_units-value_cast-0d[_» more&period;&period;&period;_]#

Explicit cast of a quantity point&apos;s representation


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Quantity[Quantity] ToQ,
    typename FwdQP,
    link:#mp_units-QuantityPoint[QuantityPoint] QP = std::remove&lowbar;cvref&lowbar;t&lt;FwdQP&gt;&gt;
requires (ToQ&colon;&colon;quantity&lowbar;spec &equals;&equals; QP&colon;&colon;quantity&lowbar;spec) &amp;&amp;
          (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(ToQ&colon;&colon;unit), QP&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          std&colon;&colon;constructible&lowbar;from&lt;typename ToQ&colon;&colon;rep, typename QP&colon;&colon;rep&gt; &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;QP&colon;&colon;unit, ToQ&colon;&colon;unit, typename ToQ&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
link:#mp_units-value_cast-0a[value&lowbar;cast](FwdQP&& qp);
----

[.small]#link:#mp_units-value_cast-0a[_» more&period;&period;&period;_]#

Explicit cast of a quantity point&apos;s representation, including potentially the point origin


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-QuantityPoint[QuantityPoint] ToQP,
    typename FwdQP,
    link:#mp_units-QuantityPoint[QuantityPoint] QP = std::remove&lowbar;cvref&lowbar;t&lt;FwdQP&gt;&gt;
requires (ToQP&colon;&colon;quantity&lowbar;spec &equals;&equals; QP&colon;&colon;quantity&lowbar;spec) &amp;&amp;
          (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(ToQP&colon;&colon;unit), QP&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          (detail&colon;&colon;same&lowbar;absolute&lowbar;point&lowbar;origins(ToQP&colon;&colon;point&lowbar;origin, QP&colon;&colon;point&lowbar;origin)) &amp;&amp;
          std&colon;&colon;constructible&lowbar;from&lt;typename ToQP&colon;&colon;rep, typename QP&colon;&colon;rep&gt; &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;QP&colon;&colon;unit, ToQP&colon;&colon;unit, typename ToQP&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
link:#mp_units-value_cast-06[value&lowbar;cast](FwdQP&& qp);
----

[.small]#link:#mp_units-value_cast-06[_» more&period;&period;&period;_]#

Explicit cast of a quantity point&apos;s representation type


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename ToRep,
    typename FwdQP,
    link:#mp_units-QuantityPoint[QuantityPoint] QP = std::remove&lowbar;cvref&lowbar;t&lt;FwdQP&gt;&gt;
requires RepresentationOf&lt;ToRep, QP&colon;&colon;quantity&lowbar;spec&gt; &amp;&amp; std&colon;&colon;constructible&lowbar;from&lt;ToRep, typename QP&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;QP&colon;&colon;reference, QP&colon;&colon;point&lowbar;origin, ToRep&gt;]
link:#mp_units-value_cast-021[value&lowbar;cast](FwdQP&& qp);
----

[.small]#link:#mp_units-value_cast-021[_» more&period;&period;&period;_]#

Explicit cast of a quantity point&apos;s unit


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit] auto ToU,
    typename FwdQP,
    link:#mp_units-QuantityPoint[QuantityPoint] QP = std::remove&lowbar;cvref&lowbar;t&lt;FwdQP&gt;&gt;
requires (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(ToU)), QP&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;QP&colon;&colon;unit, ToU, typename QP&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
link:#mp_units-value_cast-02e[value&lowbar;cast](FwdQP&& qp);
----

[.small]#link:#mp_units-value_cast-02e[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename ToRep,
    link:#mp_units-Unit[Unit] auto ToU,
    typename FwdQ,
    link:#mp_units-Quantity[Quantity] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(ToU)), Q&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          RepresentationOf&lt;ToRep, Q&colon;&colon;quantity&lowbar;spec&gt; &amp;&amp; std&colon;&colon;constructible&lowbar;from&lt;ToRep, typename Q&colon;&colon;rep&gt; &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;Q&colon;&colon;unit, ToU, ToRep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-value_cast-02c[value&lowbar;cast](FwdQ&& q);
----

[.small]#link:#mp_units-value_cast-02c[_» more&period;&period;&period;_]#

Explicit cast of a quantity&apos;s unit and representation type


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit] auto ToU,
    typename ToRep,
    typename FwdQ,
    link:#mp_units-Quantity[Quantity] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(ToU)), Q&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          RepresentationOf&lt;ToRep, Q&colon;&colon;quantity&lowbar;spec&gt; &amp;&amp; std&colon;&colon;constructible&lowbar;from&lt;ToRep, typename Q&colon;&colon;rep&gt; &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;Q&colon;&colon;unit, ToU, ToRep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
link:#mp_units-value_cast-00[value&lowbar;cast](FwdQ&& q);
----

[.small]#link:#mp_units-value_cast-00[_» more&period;&period;&period;_]#


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename ToRep,
    link:#mp_units-Unit[Unit] auto ToU,
    typename FwdQP,
    link:#mp_units-QuantityPoint[QuantityPoint] QP = std::remove&lowbar;cvref&lowbar;t&lt;FwdQP&gt;&gt;
requires (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(ToU)), QP&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          RepresentationOf&lt;ToRep, QP&colon;&colon;quantity&lowbar;spec&gt; &amp;&amp; std&colon;&colon;constructible&lowbar;from&lt;ToRep, typename QP&colon;&colon;rep&gt; &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;QP&colon;&colon;unit, ToU, ToRep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
link:#mp_units-value_cast-09[value&lowbar;cast](FwdQP&& qp);
----

[.small]#link:#mp_units-value_cast-09[_» more&period;&period;&period;_]#

Explicit cast of a quantity point&apos;s unit and representation type


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit] auto ToU,
    typename ToRep,
    typename FwdQP,
    link:#mp_units-QuantityPoint[QuantityPoint] QP = std::remove&lowbar;cvref&lowbar;t&lt;FwdQP&gt;&gt;
requires (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(ToU)), QP&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          RepresentationOf&lt;ToRep, QP&colon;&colon;quantity&lowbar;spec&gt; &amp;&amp; std&colon;&colon;constructible&lowbar;from&lt;ToRep, typename QP&colon;&colon;rep&gt; &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;QP&colon;&colon;unit, ToU, ToRep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
link:#mp_units-value_cast-08[value&lowbar;cast](FwdQP&& qp);
----

[.small]#link:#mp_units-value_cast-08[_» more&period;&period;&period;_]#

== Template Parameters

[cols=2]
|===
| Name
| Description
| *ToQ*
| a target quantity type to which to cast the representation
| *ToRep*
| a representation type to use for a target quantity
| *ToU*
| a unit to use for a target quantity
| *ToQP*
| a target quantity point type to which to cast the representation of the point
|===

Explicit cast of a quantity&apos;s representation

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;value&lowbar;cast&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Quantity[Quantity] ToQ,
    typename FwdQ,
    link:#mp_units-Quantity[Quantity] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires (ToQ&colon;&colon;quantity&lowbar;spec &equals;&equals; Q&colon;&colon;quantity&lowbar;spec) &amp;&amp;
          (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(ToQ&colon;&colon;unit), Q&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          std&colon;&colon;constructible&lowbar;from&lt;typename ToQ&colon;&colon;rep, typename Q&colon;&colon;rep&gt; &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;Q&colon;&colon;unit, ToQ&colon;&colon;unit, typename ToQ&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
value&lowbar;cast(FwdQ&& q);
----

== Description

Implicit conversions between quantities of different types are allowed only for &quot;safe&quot; (e&period;g&period; non&hyphen;truncating) conversion&period; In truncating cases an explicit cast have to be used&period;

using ToQ &equals; quantity&lt;us, int&gt;&semi; auto q &equals; value&lowbar;cast&lt;ToQ&gt;(1&period;23 &ast; ms)&semi;

Note that value&lowbar;cast only changes the &quot;representation aspects&quot; (unit and representation type), but not the &quot;meaning&quot; (quantity type)&period;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *ToQ*
| a target quantity type to which to cast the representation
|===

Explicit cast of a quantity&apos;s representation type

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;value&lowbar;cast&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename ToRep,
    typename FwdQ,
    link:#mp_units-Quantity[Quantity] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires RepresentationOf&lt;ToRep, Q&colon;&colon;quantity&lowbar;spec&gt; &amp;&amp; std&colon;&colon;constructible&lowbar;from&lt;ToRep, typename Q&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity-01[quantity&lt;Q&colon;&colon;reference, ToRep&gt;]
value&lowbar;cast(FwdQ&& q);
----

== Description

Implicit conversions between quantities of different types are allowed only for &quot;safe&quot; (e&period;g&period; non&hyphen;truncating) conversion&period; In truncating cases an explicit cast have to be used&period;

auto q &equals; value&lowbar;cast&lt;int&gt;(1&period;23 &ast; ms)&semi;

== Return Value

A quantity

== Template Parameters

[cols=2]
|===
| Name
| Description
| *ToRep*
| a representation type to use for a target quantity
|===

Explicit cast of a quantity&apos;s unit

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;value&lowbar;cast&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto ToU,
    typename FwdQ,
    link:#mp_units-Quantity[Quantity] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(ToU)), Q&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;Q&colon;&colon;unit, ToU, typename Q&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
value&lowbar;cast(FwdQ&& q);
----

== Description

Implicit conversions between quantities of different types are allowed only for &quot;safe&quot; (e&period;g&period; non&hyphen;truncating) conversion&period; In truncating cases an explicit cast have to be used&period;

auto d &equals; value&lowbar;cast&lt;si&colon;&colon;second&gt;(1234 &ast; ms)&semi;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *ToU*
| a unit to use for a target quantity
|===

Explicit cast of a quantity point&apos;s representation

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;value&lowbar;cast&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Quantity[Quantity] ToQ,
    typename FwdQP,
    link:#mp_units-QuantityPoint[QuantityPoint] QP = std::remove&lowbar;cvref&lowbar;t&lt;FwdQP&gt;&gt;
requires (ToQ&colon;&colon;quantity&lowbar;spec &equals;&equals; QP&colon;&colon;quantity&lowbar;spec) &amp;&amp;
          (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(ToQ&colon;&colon;unit), QP&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          std&colon;&colon;constructible&lowbar;from&lt;typename ToQ&colon;&colon;rep, typename QP&colon;&colon;rep&gt; &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;QP&colon;&colon;unit, ToQ&colon;&colon;unit, typename ToQ&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
value&lowbar;cast(FwdQP&& qp);
----

== Description

Implicit conversions between quantities of different types are allowed only for &quot;safe&quot; (e&period;g&period; non&hyphen;truncating) conversion&period; In truncating cases an explicit cast have to be used&period;

inline constexpr struct A &colon; absolute&lowbar;point&lowbar;origin[ A&semi;]

using ToQ &equals; quantity&lt;mm, int&gt;&semi; auto qp &equals; value&lowbar;cast&lt;ToQ&gt;(quantity&lowbar;point&lcub;1&period;23 &ast; m&rcub;)&semi;

Note that value&lowbar;cast only changes the &quot;representation aspects&quot; (unit and representation type), but not the &quot;meaning&quot; (quantity type or the actual point that is being described)&period;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *ToQ*
| a target quantity type to which to cast the representation of the point
|===

Explicit cast of a quantity point&apos;s representation, including potentially the point origin

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;value&lowbar;cast&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-QuantityPoint[QuantityPoint] ToQP,
    typename FwdQP,
    link:#mp_units-QuantityPoint[QuantityPoint] QP = std::remove&lowbar;cvref&lowbar;t&lt;FwdQP&gt;&gt;
requires (ToQP&colon;&colon;quantity&lowbar;spec &equals;&equals; QP&colon;&colon;quantity&lowbar;spec) &amp;&amp;
          (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(ToQP&colon;&colon;unit), QP&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          (detail&colon;&colon;same&lowbar;absolute&lowbar;point&lowbar;origins(ToQP&colon;&colon;point&lowbar;origin, QP&colon;&colon;point&lowbar;origin)) &amp;&amp;
          std&colon;&colon;constructible&lowbar;from&lt;typename ToQP&colon;&colon;rep, typename QP&colon;&colon;rep&gt; &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;QP&colon;&colon;unit, ToQP&colon;&colon;unit, typename ToQP&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
value&lowbar;cast(FwdQP&& qp);
----

== Description

Implicit conversions between quantities of different types are allowed only for &quot;safe&quot; (e&period;g&period; non&hyphen;truncating) conversion&period; In truncating cases an explicit cast have to be used&period;

inline constexpr struct A &colon; absolute&lowbar;point&lowbar;origin[ A&semi; inline constexpr struct B &colon; relative&lowbar;point&lowbar;origin[ B&semi;]]

using ToQP &equals; quantity&lowbar;point&lt;mm, B, int&gt;&semi; auto qp &equals; value&lowbar;cast&lt;ToQP&gt;(quantity&lowbar;point&lcub;1&period;23 &ast; m&rcub;)&semi;

Note that value&lowbar;cast only changes the &quot;representation aspects&quot; (unit, representation type and point origin), but not the &quot;meaning&quot; (quantity type or the actual point that is being described)&period;

Note also that changing the point origin bears risks regarding truncation and overflow similar to other casts that change representation (which is why we require a `value&lowbar;cast` and disallow implicit conversions)&period; This cast is guaranteed not to cause overflow of any intermediate representation type provided that the input quantity point is within the range of `ToQP`&period; Calling `value&lowbar;cast&lt;ToQP&gt;(qp)` on a `qp` outside of the range of `ToQP` is potentially undefined behaviour&period; The implementation further attempts not to cause more than rounding error than approximately the sum of the resolution of `qp` as represented in `FromQP`, plust the resolution of `qp` as represented in `ToQP`&period;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *ToQP*
| a target quantity point type to which to cast the representation of the point
|===

Explicit cast of a quantity point&apos;s representation type

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;value&lowbar;cast&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename ToRep,
    typename FwdQP,
    link:#mp_units-QuantityPoint[QuantityPoint] QP = std::remove&lowbar;cvref&lowbar;t&lt;FwdQP&gt;&gt;
requires RepresentationOf&lt;ToRep, QP&colon;&colon;quantity&lowbar;spec&gt; &amp;&amp; std&colon;&colon;constructible&lowbar;from&lt;ToRep, typename QP&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;QP&colon;&colon;reference, QP&colon;&colon;point&lowbar;origin, ToRep&gt;]
value&lowbar;cast(FwdQP&& qp);
----

== Description

Implicit conversions between quantity points of different types are allowed only for &quot;safe&quot; (e&period;g&period; non&hyphen;truncating) conversion&period; In truncating cases an explicit cast have to be used&period;

auto qp &equals; value&lowbar;cast&lt;int&gt;(quantity&lowbar;point&lcub;1&period;23 &ast; ms&rcub;)&semi;

== Return Value

A quantity point

== Template Parameters

[cols=2]
|===
| Name
| Description
| *ToRep*
| a representation type to use for a target quantity point
|===

Explicit cast of a quantity point&apos;s unit

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;value&lowbar;cast&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit] auto ToU,
    typename FwdQP,
    link:#mp_units-QuantityPoint[QuantityPoint] QP = std::remove&lowbar;cvref&lowbar;t&lt;FwdQP&gt;&gt;
requires (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(ToU)), QP&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;QP&colon;&colon;unit, ToU, typename QP&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
value&lowbar;cast(FwdQP&& qp);
----

== Description

Implicit conversions between quantity points of different types are allowed only for &quot;safe&quot; (e&period;g&period; non&hyphen;truncating) conversion&period; In truncating cases an explicit cast have to be used&period;

auto qp &equals; value&lowbar;cast&lt;si&colon;&colon;second&gt;(quantity&lowbar;point&lcub;1234 &ast; ms&rcub;)&semi;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *ToU*
| a unit to use for a target quantity point
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;value&lowbar;cast&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename ToRep,
    link:#mp_units-Unit[Unit] auto ToU,
    typename FwdQ,
    link:#mp_units-Quantity[Quantity] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(ToU)), Q&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          RepresentationOf&lt;ToRep, Q&colon;&colon;quantity&lowbar;spec&gt; &amp;&amp; std&colon;&colon;constructible&lowbar;from&lt;ToRep, typename Q&colon;&colon;rep&gt; &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;Q&colon;&colon;unit, ToU, ToRep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
value&lowbar;cast(FwdQ&& q);
----

Explicit cast of a quantity&apos;s unit and representation type

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;value&lowbar;cast&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit] auto ToU,
    typename ToRep,
    typename FwdQ,
    link:#mp_units-Quantity[Quantity] Q = std::remove&lowbar;cvref&lowbar;t&lt;FwdQ&gt;&gt;
requires (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(ToU)), Q&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          RepresentationOf&lt;ToRep, Q&colon;&colon;quantity&lowbar;spec&gt; &amp;&amp; std&colon;&colon;constructible&lowbar;from&lt;ToRep, typename Q&colon;&colon;rep&gt; &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;Q&colon;&colon;unit, ToU, ToRep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-Quantity[Quantity] auto
value&lowbar;cast(FwdQ&& q);
----

== Description

Implicit conversions between quantities of different types are allowed only for &quot;safe&quot; (e&period;g&period; non&hyphen;truncating) conversion&period; In truncating cases an explicit cast have to be used&period;

auto q &equals; value&lowbar;cast&lt;us, int&gt;(1&period;23 &ast; ms)&semi;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *ToU*
| a unit to use for the target quantity
| *ToRep*
| a representation type to use for the target quantity
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;value&lowbar;cast&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename ToRep,
    link:#mp_units-Unit[Unit] auto ToU,
    typename FwdQP,
    link:#mp_units-QuantityPoint[QuantityPoint] QP = std::remove&lowbar;cvref&lowbar;t&lt;FwdQP&gt;&gt;
requires (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(ToU)), QP&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          RepresentationOf&lt;ToRep, QP&colon;&colon;quantity&lowbar;spec&gt; &amp;&amp; std&colon;&colon;constructible&lowbar;from&lt;ToRep, typename QP&colon;&colon;rep&gt; &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;QP&colon;&colon;unit, ToU, ToRep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
value&lowbar;cast(FwdQP&& qp);
----

Explicit cast of a quantity point&apos;s unit and representation type

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;value&lowbar;cast&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Unit[Unit] auto ToU,
    typename ToRep,
    typename FwdQP,
    link:#mp_units-QuantityPoint[QuantityPoint] QP = std::remove&lowbar;cvref&lowbar;t&lt;FwdQP&gt;&gt;
requires (MP&lowbar;UNITS&lowbar;WEAK&lowbar;UNIT&lowbar;OF(MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(ToU)), QP&colon;&colon;quantity&lowbar;spec)) &amp;&amp;
          RepresentationOf&lt;ToRep, QP&colon;&colon;quantity&lowbar;spec&gt; &amp;&amp; std&colon;&colon;constructible&lowbar;from&lt;ToRep, typename QP&colon;&colon;rep&gt; &amp;&amp;
          detail&colon;&colon;SaneScaling&lt;QP&colon;&colon;unit, ToU, ToRep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
link:#mp_units-QuantityPoint[QuantityPoint] auto
value&lowbar;cast(FwdQP&& qp);
----

== Description

Implicit conversions between quantities of different types are allowed only for &quot;safe&quot; (e&period;g&period; non&hyphen;truncating) conversion&period; In truncating cases an explicit cast have to be used&period;

auto qp &equals; value&lowbar;cast&lt;us, int&gt;(quantity&lowbar;point&lcub;1&period;23 &ast; ms&rcub;)&semi;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *ToU*
| a unit to use for the target quantity
| *ToRep*
| a representation type to use for the target quantity
|===

Stream insertion operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

Stream insertion operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::basic&lowbar;ostream&lt;CharT&gt;&
link:#mp_units-operator_lshift-0e6[operator&lt;&lt;](
    std::basic&lowbar;ostream&lt;CharT&gt;& os,
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& str);
----

[.small]#link:#mp_units-operator_lshift-0e6[_» more&period;&period;&period;_]#

Stream insertion operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::ostream&
link:#mp_units-operator_lshift-0b[operator&lt;&lt;](
    std::ostream& os,
    link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector] const& vec);
----

[.small]#link:#mp_units-operator_lshift-0b[_» more&period;&period;&period;_]#

Stream insertion operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename CharT,
    typename Traits,
    link:#mp_units-Unit[Unit] D&gt;
std::basic&lowbar;ostream&lt;CharT, Traits&gt;&
link:#mp_units-operator_lshift-04[operator&lt;&lt;](
    std::basic&lowbar;ostream&lt;CharT, Traits&gt;& os,
    D d);
----

[.small]#link:#mp_units-operator_lshift-04[_» more&period;&period;&period;_]#

Stream insertion operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename CharT,
    typename Traits,
    auto R,
    typename Rep&gt;
std::basic&lowbar;ostream&lt;CharT, Traits&gt;&
link:#mp_units-operator_lshift-0e0[operator&lt;&lt;](
    std::basic&lowbar;ostream&lt;CharT, Traits&gt;& os,
    link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& q)
requires requires &lcub; os &lt;&lt; q&period;numerical&lowbar;value&lowbar;ref&lowbar;in(q&period;unit)&semi; &rcub;;
----

[.small]#link:#mp_units-operator_lshift-0e0[_» more&period;&period;&period;_]#

Stream insertion operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
std::basic&lowbar;ostream&lt;CharT&gt;&
operator&lt;&lt;(
    std::basic&lowbar;ostream&lt;CharT&gt;& os,
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& str);
----

== Return Value

Reference to the current output stream

== Parameters

[cols=2]
|===
| Name
| Description
| *os*
| An output stream
| *str*
| The object to output
|===

Stream insertion operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
constexpr
std::ostream&
operator&lt;&lt;(
    std::ostream& os,
    link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector] const& vec);
----

== Return Value

Reference to the current output stream

== Parameters

[cols=2]
|===
| Name
| Description
| *os*
| An output stream
| *vec*
| The object to output
|===

Stream insertion operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename CharT,
    typename Traits,
    link:#mp_units-Unit[Unit] D&gt;
std::basic&lowbar;ostream&lt;CharT, Traits&gt;&
operator&lt;&lt;(
    std::basic&lowbar;ostream&lt;CharT, Traits&gt;& os,
    D d);
----

== Return Value

Reference to the current output stream

== Parameters

[cols=2]
|===
| Name
| Description
| *os*
| An output stream
| *d*
| The object to output
|===

Stream insertion operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename CharT,
    typename Traits,
    auto R,
    typename Rep&gt;
std::basic&lowbar;ostream&lt;CharT, Traits&gt;&
operator&lt;&lt;(
    std::basic&lowbar;ostream&lt;CharT, Traits&gt;& os,
    link:#mp_units-quantity-01[quantity&lt;R, Rep&gt;] const& q)
requires requires &lcub; os &lt;&lt; q&period;numerical&lowbar;value&lowbar;ref&lowbar;in(q&period;unit)&semi; &rcub;;
----

== Return Value

Reference to the current output stream

== Parameters

[cols=2]
|===
| Name
| Description
| *os*
| An output stream
| *q*
| The object to output
|===

Equality operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
bool
link:#mp_units-operator_eq-03d[operator&equals;&equals;](
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& lhs,
    CharT const(& rhs)[]);
----

[.small]#link:#mp_units-operator_eq-03d[_» more&period;&period;&period;_]#

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
link:#mp_units-operator_eq-032[operator&equals;&equals;](
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& lhs,
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N2&gt;] const& rhs);
----

[.small]#link:#mp_units-operator_eq-032[_» more&period;&period;&period;_]#

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::size&lowbar;t N2,
    std::size&lowbar;t M2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
link:#mp_units-operator_eq-0a[operator&equals;&equals;](
    link:#mp_units-symbol_text-032[symbol&lowbar;text] const& lhs,
    link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;N2, M2&gt;] const& rhs) noexcept;
----

[.small]#link:#mp_units-operator_eq-0a[_» more&period;&period;&period;_]#

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-AssociatedUnit[AssociatedUnit] U2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
bool
link:#mp_units-operator_eq-02[operator&equals;&equals;](
    link:#mp_units-reference[reference] lhs,
    U2 u2);
----

[.small]#link:#mp_units-operator_eq-02[_» more&period;&period;&period;_]#

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Q2,
    typename U2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
bool
link:#mp_units-operator_eq-07[operator&equals;&equals;](
    link:#mp_units-reference[reference] lhs,
    link:#mp_units-reference[reference&lt;Q2, U2&gt;] rhs);
----

[.small]#link:#mp_units-operator_eq-07[_» more&period;&period;&period;_]#

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] Value&gt;
requires detail&colon;&colon;DimensionlessOne&lt;Q&colon;&colon;reference&gt; &amp;&amp; std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;rep, Value&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
link:#mp_units-operator_eq-010[operator&equals;&equals;](
    Q const& lhs,
    Value const& rhs);
----

[.small]#link:#mp_units-operator_eq-010[_» more&period;&period;&period;_]#

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    auto R2,
    typename Rep2&gt;
requires requires &lcub; typename std&colon;&colon;common&lowbar;type&lowbar;t&lt;quantity, quantity&lt;R2, Rep2&gt;&gt;&semi; &rcub; &amp;&amp;
             std&colon;&colon;equality&lowbar;comparable&lt;typename std&colon;&colon;common&lowbar;type&lowbar;t&lt;quantity, quantity&lt;R2, Rep2&gt;&gt;&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
link:#mp_units-operator_eq-09[operator&equals;&equals;](
    Q const& lhs,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& rhs);
----

[.small]#link:#mp_units-operator_eq-09[_» more&period;&period;&period;_]#

Equality operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&lowbar;point&gt; QP,
    link:#mp_units-QuantityPointOf[QuantityPointOf&lt;absolute&lowbar;point&lowbar;origin&gt;] QP2&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;quantity&lowbar;type, typename QP2&colon;&colon;quantity&lowbar;type&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
link:#mp_units-operator_eq-011[operator&equals;&equals;](
    QP const& lhs,
    QP2 const& rhs);
----

[.small]#link:#mp_units-operator_eq-011[_» more&period;&period;&period;_]#

Equality operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
bool
operator&equals;&equals;(
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& lhs,
    CharT const(& rhs)[]);
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Equality operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
operator&equals;&equals;(
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& lhs,
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N2&gt;] const& rhs);
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Equality operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::size&lowbar;t N2,
    std::size&lowbar;t M2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
operator&equals;&equals;(
    link:#mp_units-symbol_text-032[symbol&lowbar;text] const& lhs,
    link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;N2, M2&gt;] const& rhs) noexcept;
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Equality operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-AssociatedUnit[AssociatedUnit] U2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
bool
operator&equals;&equals;(
    link:#mp_units-reference[reference] lhs,
    U2 u2);
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *u2*
| The right operand
|===

Equality operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Q2,
    typename U2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
bool
operator&equals;&equals;(
    link:#mp_units-reference[reference] lhs,
    link:#mp_units-reference[reference&lt;Q2, U2&gt;] rhs);
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Equality operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] Value&gt;
requires detail&colon;&colon;DimensionlessOne&lt;Q&colon;&colon;reference&gt; &amp;&amp; std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;rep, Value&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
operator&equals;&equals;(
    Q const& lhs,
    Value const& rhs);
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Equality operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    auto R2,
    typename Rep2&gt;
requires requires &lcub; typename std&colon;&colon;common&lowbar;type&lowbar;t&lt;quantity, quantity&lt;R2, Rep2&gt;&gt;&semi; &rcub; &amp;&amp;
             std&colon;&colon;equality&lowbar;comparable&lt;typename std&colon;&colon;common&lowbar;type&lowbar;t&lt;quantity, quantity&lt;R2, Rep2&gt;&gt;&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
operator&equals;&equals;(
    Q const& lhs,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& rhs);
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Equality operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&lowbar;point&gt; QP,
    link:#mp_units-QuantityPointOf[QuantityPointOf&lt;absolute&lowbar;point&lowbar;origin&gt;] QP2&gt;
requires std&colon;&colon;equality&lowbar;comparable&lowbar;with&lt;quantity&lowbar;type, typename QP2&colon;&colon;quantity&lowbar;type&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
bool
operator&equals;&equals;(
    QP const& lhs,
    QP2 const& rhs);
----

== Return Value

`true` if the objects are equal, `false` otherwise

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Three&hyphen;way comparison operators

== Synopses

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

Three&hyphen;way comparison operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
auto
link:#mp_units-operator_3way-05[operator&lt;&equals;&gt;](
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& lhs,
    CharT const(& rhs)[]);
----

[.small]#link:#mp_units-operator_3way-05[_» more&period;&period;&period;_]#

Three&hyphen;way comparison operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
auto
link:#mp_units-operator_3way-0de[operator&lt;&equals;&gt;](
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& lhs,
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N2&gt;] const& rhs);
----

[.small]#link:#mp_units-operator_3way-0de[_» more&period;&period;&period;_]#

Three&hyphen;way comparison operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::size&lowbar;t N2,
    std::size&lowbar;t M2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
auto
link:#mp_units-operator_3way-0b[operator&lt;&equals;&gt;](
    link:#mp_units-symbol_text-032[symbol&lowbar;text] const& lhs,
    link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;N2, M2&gt;] const& rhs) noexcept;
----

[.small]#link:#mp_units-operator_3way-0b[_» more&period;&period;&period;_]#

Three&hyphen;way comparison operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] Value&gt;
requires detail&colon;&colon;DimensionlessOne&lt;Q&colon;&colon;reference&gt; &amp;&amp; std&colon;&colon;three&lowbar;way&lowbar;comparable&lowbar;with&lt;rep, Value&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
auto
link:#mp_units-operator_3way-01[operator&lt;&equals;&gt;](
    Q const& lhs,
    Value const& rhs);
----

[.small]#link:#mp_units-operator_3way-01[_» more&period;&period;&period;_]#

Three&hyphen;way comparison operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    auto R2,
    typename Rep2&gt;
requires requires &lcub; typename std&colon;&colon;common&lowbar;type&lowbar;t&lt;quantity, quantity&lt;R2, Rep2&gt;&gt;&semi; &rcub; &amp;&amp;
             std&colon;&colon;three&lowbar;way&lowbar;comparable&lt;typename std&colon;&colon;common&lowbar;type&lowbar;t&lt;quantity, quantity&lt;R2, Rep2&gt;&gt;&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
auto
link:#mp_units-operator_3way-07[operator&lt;&equals;&gt;](
    Q const& lhs,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& rhs);
----

[.small]#link:#mp_units-operator_3way-07[_» more&period;&period;&period;_]#

Three&hyphen;way comparison operator


[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&lowbar;point&gt; QP,
    link:#mp_units-QuantityPointOf[QuantityPointOf&lt;absolute&lowbar;point&lowbar;origin&gt;] QP2&gt;
requires std&colon;&colon;three&lowbar;way&lowbar;comparable&lowbar;with&lt;quantity&lowbar;type, typename QP2&colon;&colon;quantity&lowbar;type&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
auto
link:#mp_units-operator_3way-0d2[operator&lt;&equals;&gt;](
    QP const& lhs,
    QP2 const& rhs);
----

[.small]#link:#mp_units-operator_3way-0d2[_» more&period;&period;&period;_]#

Three&hyphen;way comparison operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
consteval
auto
operator&lt;&equals;&gt;(
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& lhs,
    CharT const(& rhs)[]);
----

== Return Value

The relative order of the objects

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Three&hyphen;way comparison operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
auto
operator&lt;&equals;&gt;(
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string] const& lhs,
    link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N2&gt;] const& rhs);
----

== Return Value

The relative order of the objects

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Three&hyphen;way comparison operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::size&lowbar;t N2,
    std::size&lowbar;t M2&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
auto
operator&lt;&equals;&gt;(
    link:#mp_units-symbol_text-032[symbol&lowbar;text] const& lhs,
    link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;N2, M2&gt;] const& rhs) noexcept;
----

== Return Value

The relative order of the objects

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Three&hyphen;way comparison operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;quantity&lowbar;spec&gt;] Value&gt;
requires detail&colon;&colon;DimensionlessOne&lt;Q&colon;&colon;reference&gt; &amp;&amp; std&colon;&colon;three&lowbar;way&lowbar;comparable&lowbar;with&lt;rep, Value&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
auto
operator&lt;&equals;&gt;(
    Q const& lhs,
    Value const& rhs);
----

== Return Value

The relative order of the objects

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Three&hyphen;way comparison operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&gt; Q,
    auto R2,
    typename Rep2&gt;
requires requires &lcub; typename std&colon;&colon;common&lowbar;type&lowbar;t&lt;quantity, quantity&lt;R2, Rep2&gt;&gt;&semi; &rcub; &amp;&amp;
             std&colon;&colon;three&lowbar;way&lowbar;comparable&lt;typename std&colon;&colon;common&lowbar;type&lowbar;t&lt;quantity, quantity&lt;R2, Rep2&gt;&gt;&colon;&colon;rep&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
auto
operator&lt;&equals;&gt;(
    Q const& lhs,
    link:#mp_units-quantity-01[quantity&lt;R2, Rep2&gt;] const& rhs);
----

== Return Value

The relative order of the objects

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

Three&hyphen;way comparison operator

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::derived&lowbar;from&lt;quantity&lowbar;point&gt; QP,
    link:#mp_units-QuantityPointOf[QuantityPointOf&lt;absolute&lowbar;point&lowbar;origin&gt;] QP2&gt;
requires std&colon;&colon;three&lowbar;way&lowbar;comparable&lowbar;with&lt;quantity&lowbar;type, typename QP2&colon;&colon;quantity&lowbar;type&gt;
&lsqb;&lsqb;nodiscard&rsqb;&rsqb;
constexpr
auto
operator&lt;&equals;&gt;(
    QP const& lhs,
    QP2 const& rhs);
----

== Return Value

The relative order of the objects

== Parameters

[cols=2]
|===
| Name
| Description
| *lhs*
| The left operand
| *rhs*
| The right operand
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;construction&lowbar;helpers&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;deprecated&rsqb;&rsqb;
template&lt;link:#mp_units-Reference[Reference] auto R&gt;
constexpr link:#mp_units-point_[point&lowbar;&lt;decltype(R)&gt;] absolute = &lcub;&rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;construction&lowbar;helpers&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Reference[Reference] auto R&gt;
constexpr link:#mp_units-delta_[delta&lowbar;&lt;decltype(R)&gt;] delta = &lcub;&rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr link:#mp_units-dimension_one-063[dimension&lowbar;one] dimension&lowbar;one = dimension&lowbar;one;
----

Quantity of dimension one

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr link:#mp_units-dimensionless-0f[dimensionless] dimensionless = dimensionless;
----

== Description

Quantity of dimension one also commonly named as &quot;dimensionless&quot; is a quantity with a dimension for which all the exponents of the factors corresponding to the base dimensions are zero&period;

&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol; REAL SCALAR &sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;representation&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
constexpr bool disable&lowbar;real = false;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;representation&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&gt;
inline constexpr bool disable&lowbar;real&lt;bool&gt; = true;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;representation&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr &sol;&ast; implementation-defined &ast;&sol; imag = imag;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;customization&lowbar;points&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;deprecated&rsqb;&rsqb;
template&lt;typename Rep&gt;
constexpr bool is&lowbar;complex = false;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    template&lt;typename&period;&period;&period;&gt; typename Type&gt;
constexpr bool is&lowbar;derived&lowbar;from&lowbar;specialization&lowbar;of = requires(T&ast; t) &lcub; detail&colon;&colon;to&lowbar;base&lowbar;specialization&lowbar;of&lt;Type&gt;(t)&semi; &rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    template&lt;auto&period;&period;&period;&gt; typename Type&gt;
constexpr bool is&lowbar;derived&lowbar;from&lowbar;specialization&lowbar;of&lowbar;v = requires(T&ast; t) &lcub; detail&colon;&colon;to&lowbar;base&lowbar;specialization&lowbar;of&lowbar;v&lt;Type&gt;(t)&semi; &rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr link:#mp_units-is_kind-06[is&lowbar;kind] is&lowbar;kind = is&lowbar;kind;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class T,
    class U&gt;
constexpr bool is&lowbar;same&lowbar;v = false;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class T&gt;
constexpr bool is&lowbar;same&lowbar;v&lt;T, T&gt; = true;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;customization&lowbar;points&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;deprecated&rsqb;&rsqb;
template&lt;typename Rep&gt;
constexpr bool is&lowbar;scalar = false;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    template&lt;typename&period;&period;&period;&gt; typename Type&gt;
constexpr bool is&lowbar;specialization&lowbar;of = false;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename&period;&period;&period; Params,
    template&lt;typename&period;&period;&period;&gt; typename Type&gt;
constexpr bool is&lowbar;specialization&lowbar;of&lt;Type&lt;Params&period;&period;&period;&gt;, Type&gt; = true;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    template&lt;auto&period;&period;&period;&gt; typename Type&gt;
constexpr bool is&lowbar;specialization&lowbar;of&lowbar;v = false;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;type&lowbar;traits&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    auto Params&period;&period;&period;,
    template&lt;auto&period;&period;&period;&gt; typename Type&gt;
constexpr bool is&lowbar;specialization&lowbar;of&lowbar;v&lt;Type&lt;Params&period;&period;&period;&gt;, Type&gt; = true;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;customization&lowbar;points&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;deprecated&rsqb;&rsqb;
template&lt;typename Rep&gt;
constexpr bool is&lowbar;tensor = false;
----

Specifies if a specific conversion between two types preserves the value

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;customization&lowbar;points&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename From,
    typename To&gt;
constexpr bool is&lowbar;value&lowbar;preserving = treat&lowbar;as&lowbar;floating&lowbar;point&lt;To&gt; &verbar;&verbar; !treat&lowbar;as&lowbar;floating&lowbar;point&lt;From&gt;;
----

== Description

This type trait should be specialized for a custom representation types to specify weather the conversion from the source type to the destination type preserves the value or not&period; Value&hyphen;truncating conversions should be forced by the user with explicit casts&period;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *From*
| a source representation type
| *To*
| a destination representation type
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;customization&lowbar;points&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;deprecated&rsqb;&rsqb;
template&lt;typename Rep&gt;
constexpr bool is&lowbar;vector = false;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-QuantitySpec[QuantitySpec] auto Q&gt;
requires requires &lcub; typename kind&lowbar;of&lowbar;&lt;decltype(Q)&gt;&semi; &rcub;
constexpr link:#mp_units-kind_of_-00[kind&lowbar;of&lowbar;&lt;decltype(Q)&gt;] kind&lowbar;of;
----

&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;&sol;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;magnitude&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;deprecated&rsqb;&rsqb;
template&lt;intmax&lowbar;t N&gt;
constexpr std::optional&lt;intmax&lowbar;t&gt; known&lowbar;first&lowbar;factor = std&colon;&colon;nullopt;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;magnitude&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;&sol;&ast; implementation-defined &ast;&sol; auto V&gt;
requires (detail&colon;&colon;get&lowbar;base&lowbar;value(V) &gt; 0)
constexpr link:#mp_units-UnitMagnitude[UnitMagnitude] auto mag = detail&colon;&colon;make&lowbar;magnitude&lt;V&gt;();
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;magnitude&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
&lsqb;&lsqb;deprecated&rsqb;&rsqb;
inline constexpr link:#mp_units-UnitMagnitude[UnitMagnitude] auto mag&lowbar;pi = mag&lt;pi&gt;;
----

Create a Magnitude which is some rational number raised to a rational power&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;magnitude&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    &sol;&ast; implementation-defined &ast;&sol; auto Base,
    int Num,
    int Den = 1&gt;
requires (detail&colon;&colon;get&lowbar;base&lowbar;value(Base) &gt; 0)
constexpr link:#mp_units-UnitMagnitude[UnitMagnitude] auto mag&lowbar;power = pow&lt;Num, Den&gt;(mag&lt;Base&gt;);
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;magnitude&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    intmax&lowbar;t N,
    intmax&lowbar;t D&gt;
requires (N &gt; 0)
constexpr link:#mp_units-UnitMagnitude[UnitMagnitude] auto mag&lowbar;ratio = detail&colon;&colon;prime&lowbar;factorization&lowbar;v&lt;N&gt; &sol; detail&colon;&colon;prime&lowbar;factorization&lowbar;v&lt;D&gt;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;representation&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr &sol;&ast; implementation-defined &ast;&sol; magnitude = magnitude;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;representation&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr &sol;&ast; implementation-defined &ast;&sol; modulus = modulus;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr link:#mp_units-one-0f[one] one = one;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr link:#mp_units-parts_per_million-0f[parts&lowbar;per&lowbar;million] parts&lowbar;per&lowbar;million = parts&lowbar;per&lowbar;million;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr link:#mp_units-per_mille-01[per&lowbar;mille] per&lowbar;mille = per&lowbar;mille;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr link:#mp_units-percent-02[percent] percent = percent;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;magnitude&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr link:#mp_units-pi-0c[pi] pi = pi;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;construction&lowbar;helpers&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Reference[Reference] auto R&gt;
constexpr link:#mp_units-point_[point&lowbar;&lt;decltype(R)&gt;] point = &lcub;&rcub;;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr auto ppm = parts&lowbar;per&lowbar;million;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;representation&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr &sol;&ast; implementation-defined &ast;&sol; real = real;
----

Puts a space &apos; &apos; sign before a unit symbol

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Unit[Unit] auto U&gt;
constexpr bool space&lowbar;before&lowbar;unit&lowbar;symbol = true;
----

== Description

Quantities of some units (e&period;g&period; degree, arcminute, arcsecond) should not be printed with the space between a number and a unit&period; For those a partial specialization with the value `false` should be provided&period;

Specifies if a value of a type should be treated as a floating&hyphen;point value

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;customization&lowbar;points&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename Rep&gt;
constexpr bool treat&lowbar;as&lowbar;floating&lowbar;point = std&colon;&colon;chrono&colon;&colon;treat&lowbar;as&lowbar;floating&lowbar;point&lowbar;v&lt;value&lowbar;type&lowbar;t&lt;Rep&gt;&gt;;
----

== Description

This type trait should be specialized for a custom representation type to specify that values of this type should be treated by the library as a floating&hyphen;point ones which will enable implicit conversions between quantities&period;

== Template Parameters

[cols=2]
|===
| Name
| Description
| *Rep*
| a representation type for which a type trait is defined
|===

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-QuantitySpec[QuantitySpec] auto QS&gt;
constexpr link:#mp_units-zeroth_point_origin_[zeroth&lowbar;point&lowbar;origin&lowbar;&lt;QS&gt;] zeroth&lowbar;point&lowbar;origin;
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;magnitude&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
inline constexpr auto π = pi;
----

A concept matching all units that can be used as quantity references

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename U&gt;
concept AssociatedUnit = Unit&lt;U&gt; &amp;&amp; detail&colon;&colon;has&lowbar;associated&lowbar;quantity(U&lcub;&rcub;);
----

A concept matching all dimensions in the library&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
concept Dimension = std&colon;&colon;derived&lowbar;from&lt;T, detail&colon;&colon;dimension&lowbar;interface&gt; &amp;&amp; detail&colon;&colon;SymbolicConstant&lt;T&gt;;
----

== Description

Satisfied by all dimension types in the library&period;

A concept checking if the argument is of the same dimension&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;dimension&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    auto D&gt;
concept DimensionOf = Dimension&lt;T&gt; &amp;&amp; Dimension&lt;MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(D))&gt; &amp;&amp; (T&lcub;&rcub; &equals;&equals; D);
----

== Description

Satisfied when both argument satisfy a `Dimension` concept and when they compare equal&period;

A concept matching all quantity point origins in the library

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
concept PointOrigin = std&colon;&colon;derived&lowbar;from&lt;T, detail&colon;&colon;point&lowbar;origin&lowbar;interface&gt; &amp;&amp; detail&colon;&colon;SymbolicConstant&lt;T&gt;;
----

== Description

Satisfied by either quantity points or by all types derived from `absolute&lowbar;point&lowbar;origin` class template&period;

A concept matching all quantity point origins for a specified quantity type in the library

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    auto QS&gt;
concept PointOriginFor = PointOrigin&lt;T&gt; &amp;&amp; QuantitySpecOf&lt;MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(QS)), T&colon;&colon;&lowbar;quantity&lowbar;spec&lowbar;&gt;;
----

== Description

Satisfied by all quantity point origins that are defined using a provided quantity specification&period;

A concept to be used to define prefixes for a unit

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
concept PrefixableUnit = Unit&lt;T&gt; &amp;&amp; is&lowbar;derived&lowbar;from&lowbar;specialization&lowbar;of&lowbar;v&lt;T, named&lowbar;unit&gt;;
----

A concept matching all quantities in the library

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
concept Quantity = detail&colon;&colon;is&lowbar;derived&lowbar;from&lowbar;specialization&lowbar;of&lowbar;quantity&lt;T&gt;;
----

== Description

Satisfied by all types being a either specialization or derived from `quantity`

A concept matching all external quantities like types

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
concept QuantityLike = !Quantity&lt;T&gt; &amp;&amp; detail&colon;&colon;QuantityLikeImpl&lt;T, quantity&lowbar;like&lowbar;traits&gt; &amp;&amp; requires &lcub;
  typename quantity&lt;quantity&lowbar;like&lowbar;traits&lt;T&gt;&colon;&colon;reference, typename quantity&lowbar;like&lowbar;traits&lt;T&gt;&colon;&colon;rep&gt;&semi;
&rcub;;
----

== Description

Satisfied by all external types (not&hyphen;defined in mp&hyphen;units) that via a `quantity&lowbar;like&lowbar;traits` provide all quantity&hyphen;specific information&period;

A concept matching all quantities of the provided quantity spec

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Q,
    auto QS&gt;
concept QuantityOf = Quantity&lt;Q&gt; &amp;&amp; QuantitySpec&lt;MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(QS))&gt; &amp;&amp;
                     ReferenceOf&lt;MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(Q&colon;&colon;reference), QS&gt;;
----

== Description

Satisfied by all quantities with the reference satisfying `ReferenceOf&lt;QS&gt;&period;`

A concept matching all quantity points in the library

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
concept QuantityPoint = detail&colon;&colon;is&lowbar;quantity&lowbar;point&lt;T&gt;;
----

== Description

Satisfied by all types being either a specialization or derived from `quantity&lowbar;point`

A concept matching all external quantity point like types

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
concept QuantityPointLike = !QuantityPoint&lt;T&gt; &amp;&amp; detail&colon;&colon;QuantityLikeImpl&lt;T, quantity&lowbar;point&lowbar;like&lowbar;traits&gt; &amp;&amp; requires &lcub;
  typename quantity&lowbar;point&lt;quantity&lowbar;point&lowbar;like&lowbar;traits&lt;T&gt;&colon;&colon;reference, quantity&lowbar;point&lowbar;like&lowbar;traits&lt;T&gt;&colon;&colon;point&lowbar;origin,
                          typename quantity&lowbar;point&lowbar;like&lowbar;traits&lt;T&gt;&colon;&colon;rep&gt;&semi;
&rcub;;
----

== Description

Satisfied by all external types (not&hyphen;defined in mp&hyphen;units) that via a `quantity&lowbar;point&lowbar;like&lowbar;traits` provide all quantity&lowbar;point&hyphen;specific information&period;

A concept matching all quantity points of the provided property

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename QP,
    auto V&gt;
concept QuantityPointOf = QuantityPoint&lt;QP&gt; &amp;&amp; (ReferenceOf&lt;MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(QP&colon;&colon;reference), V&gt; &verbar;&verbar;
                        detail&colon;&colon;SameAbsolutePointOriginAs&lt;MP&lowbar;UNITS&lowbar;NONCONST&lowbar;TYPE(QP&colon;&colon;absolute&lowbar;point&lowbar;origin), V&gt;);
----

== Description

Satisfied by all quantity points with a quantity&lowbar;spec being the instantiation derived from the provided quantity&lowbar;spec type, or quantity points having the origin with the same `absolute&lowbar;point&lowbar;origin`&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
concept QuantitySpec = std&colon;&colon;derived&lowbar;from&lt;T, detail&colon;&colon;quantity&lowbar;spec&lowbar;interface&lowbar;base&gt; &amp;&amp; detail&colon;&colon;SymbolicConstant&lt;T&gt;;
----

A concept matching all quantity specifications of a provided quantity spec value

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;spec&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    auto QS&gt;
concept QuantitySpecOf = QuantitySpec&lt;T&gt; &amp;&amp; QuantitySpec&lt;MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(QS))&gt; &amp;&amp; (mp&lowbar;units&colon;&colon;implicitly&lowbar;convertible(T&lcub;&rcub;, QS));
----

== Description

Satisfied by all quantity specifications that are implicitly convertible to the provided `QS` value&period;

A concept matching all references in the library&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
concept Reference = MP&lowbar;UNITS&lowbar;ASSOCIATED&lowbar;UNIT&lowbar;T(T) &verbar;&verbar; is&lowbar;specialization&lowbar;of&lt;T, reference&gt;;
----

== Description

Satisfied by all specializations of `reference&period;`

A concept matching all references of the provided quantity spec

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;reference&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    auto QS&gt;
concept ReferenceOf = Reference&lt;T&gt; &amp;&amp; QuantitySpec&lt;MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(QS))&gt; &amp;&amp;
                      QuantitySpecOf&lt;decltype(get&lowbar;quantity&lowbar;spec(T&lcub;&rcub;)), QS&gt;;
----

== Description

Satisfied by all references for which `QuantitySpecOf&lt;QS&gt;` is true&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;representation&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename T,
    auto V&gt;
concept RepresentationOf = ((QuantitySpec&lt;MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(V))&gt; &amp;&amp;
    ((detail&colon;&colon;QuantityKindSpec&lt;MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(V))&gt; &amp;&amp; detail&colon;&colon;SomeRepresentation&lt;T&gt;) &verbar;&verbar;
     detail&colon;&colon;IsOfCharacter&lt;T, V&period;character&gt;)) &verbar;&verbar;
   (std&colon;&colon;same&lowbar;as&lt;quantity&lowbar;character, decltype(V)&gt; &amp;&amp; detail&colon;&colon;IsOfCharacter&lt;T, V&gt;));
----

A concept matching all unit types in the library

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
concept Unit = std&colon;&colon;derived&lowbar;from&lt;T, detail&colon;&colon;unit&lowbar;interface&gt; &amp;&amp; detail&colon;&colon;SymbolicConstant&lt;T&gt;;
----

== Description

Satisfied by all unit types provided by the library&period;

Concept to detect whether T is a valid UnitMagnitude&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;magnitude&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;typename T&gt;
concept UnitMagnitude = is&lowbar;specialization&lowbar;of&lowbar;v&lt;T, detail&colon;&colon;unit&lowbar;magnitude&gt;;
----

A concept matching all units associated with the provided quantity spec

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;unit&lowbar;concepts&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename U,
    auto QS&gt;
concept UnitOf = MP&lowbar;UNITS&lowbar;ASSOCIATED&lowbar;UNIT&lt;U&gt; &amp;&amp; QuantitySpec&lt;MP&lowbar;UNITS&lowbar;REMOVE&lowbar;CONST(decltype(QS))&gt; &amp;&amp;
  (implicitly&lowbar;convertible(get&lowbar;quantity&lowbar;spec(U&lcub;&rcub;), QS) &verbar;&verbar;
   (unsatisfied&lt;&quot;Unit &apos;&lcub;&rcub;&apos; is associated with quantity of kind &apos;&lcub;&rcub;&apos; which is not convertible to the &apos;&lcub;&rcub;&apos; quantity&quot;&gt;(
     U&lcub;&rcub;, type&lowbar;name(get&lowbar;quantity&lowbar;spec(U&lcub;&rcub;)&period;&lowbar;quantity&lowbar;spec&lowbar;), type&lowbar;name(QS))));
----

== Description

Satisfied by all units for which an associated quantity spec is implicitly convertible to the provided `QS` value&period;

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename CharT,
    std::size&lowbar;t N&gt;
link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N &hyphen; 1&gt;](CharT const(& str)[]) -> link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N &hyphen; 1&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename CharT,
    std::same&lowbar;as&lt;CharT&gt;&period;&period;&period; Rest&gt;
link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, 1 &plus; sizeof&period;&period;&period;(Rest)&gt;](
    CharT,
    Rest&period;&period;&period;) -> link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, 1 &plus; sizeof&period;&period;&period;(Rest)&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;ext&sol;fixed&lowbar;string&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename CharT,
    std::size&lowbar;t N&gt;
link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N&gt;](
    std::from&lowbar;range&lowbar;t,
    std::array&lt;CharT, N&gt;) -> link:#mp_units-basic_fixed_string-08[basic&lowbar;fixed&lowbar;string&lt;CharT, N&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;cartesian&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    typename Arg,
    typename&period;&period;&period; Args&gt;
requires (sizeof&period;&period;&period;(Args) &lt;&equals; 2) &amp;&amp; requires &lcub; typename std&colon;&colon;common&lowbar;type&lowbar;t&lt;Arg, Args&period;&period;&period;&gt;&semi; &rcub;
link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector&lt;std::common&lowbar;type&lowbar;t&lt;Arg, Args&period;&period;&period;&gt;&gt;](
    Arg,
    Args&period;&period;&period;) -> link:#mp_units-cartesian_vector-08[cartesian&lowbar;vector&lt;std::common&lowbar;type&lowbar;t&lt;Arg, Args&period;&period;&period;&gt;&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-QuantityLike[QuantityLike] Q&gt;
link:#mp_units-quantity-01[quantity&lt;quantity&lowbar;like&lowbar;traits&lt;Q&gt;&colon;&colon;reference, quantity&lowbar;like&lowbar;traits&lt;Q&gt;::rep&gt;](Q) -> link:#mp_units-quantity-01[quantity&lt;quantity&lowbar;like&lowbar;traits&lt;Q&gt;&colon;&colon;reference, quantity&lowbar;like&lowbar;traits&lt;Q&gt;::rep&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Reference[Reference] R,
    link:#mp_units-RepresentationOf[RepresentationOf&lt;get&lowbar;quantity&lowbar;spec(R&lcub;&rcub;)&gt;] Value&gt;
link:#mp_units-quantity-01[quantity&lt;R&lcub;&rcub;, Value&gt;](
    Value v,
    R) -> link:#mp_units-quantity-01[quantity&lt;R&lcub;&rcub;, Value&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-Quantity[Quantity] Q&gt;
link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;Q&colon;&colon;reference, default&lowbar;point&lowbar;origin(Q&colon;&colon;reference), Q::rep&gt;](Q q) -> link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;Q&colon;&colon;reference, default&lowbar;point&lowbar;origin(Q&colon;&colon;reference), Q::rep&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;link:#mp_units-QuantityPointLike[QuantityPointLike] QP&gt;
link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;reference, quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;point&lowbar;origin, quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;::rep&gt;](QP) -> link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;reference, quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;&colon;&colon;point&lowbar;origin, quantity&lowbar;point&lowbar;like&lowbar;traits&lt;QP&gt;::rep&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;quantity&lowbar;point&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    link:#mp_units-Quantity[Quantity] Q,
    link:#mp_units-PointOriginFor[PointOriginFor&lt;Q&colon;&colon;quantity&lowbar;spec&gt;] PO&gt;
link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;Q&colon;&colon;reference, PO&lcub;&rcub;, Q::rep&gt;](
    Q q,
    PO) -> link:#mp_units-quantity_point-08[quantity&lowbar;point&lt;Q&colon;&colon;reference, PO&lcub;&rcub;, Q::rep&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;1, 1&gt;](char) -> link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;1, 1&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N&gt;
link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;N, N&gt;](link:#mp_units-fixed_string[fixed&lowbar;string&lt;N&gt;] const&) -> link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;N, N&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;std::size&lowbar;t N&gt;
link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;N &hyphen; 1, N &hyphen; 1&gt;](char const(&)[]) -> link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;N &hyphen; 1, N &hyphen; 1&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::size&lowbar;t N,
    std::size&lowbar;t M&gt;
link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;N, M&gt;](
    link:#mp_units-fixed_u8string[fixed&lowbar;u8string&lt;N&gt;] const&,
    link:#mp_units-fixed_string[fixed&lowbar;string&lt;M&gt;] const&) -> link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;N, M&gt;];
----

== Synopsis

Declared in `&lt;mp&hyphen;units&sol;framework&sol;symbol&lowbar;text&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    std::size&lowbar;t N,
    std::size&lowbar;t M&gt;
link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;N &hyphen; 1, M &hyphen; 1&gt;](
    char8&lowbar;t const(&)[],
    char const(&)[]) -> link:#mp_units-symbol_text-032[symbol&lowbar;text&lt;N &hyphen; 1, M &hyphen; 1&gt;];
----


[.small]#Created with https://www.mrdocs.com[MrDocs]#
