Files
mp-units/HEAD/api_reference/gen/qty.rep.html
T

166 lines
75 KiB
HTML

<!DOCTYPE html><html lang='en'><head><title>[qty.rep]</title><meta charset='UTF-8'/><link rel='stylesheet' type='text/css' href='14882.css'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Serif'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Sans'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Sans+Mono'/><link rel='icon' href='icon.png'/><link rel='stylesheet' type='text/css' href='expanded.css' title='Normal'/><link rel='alternate stylesheet' type='text/css' href='colored.css' title='Notes and examples colored'/><link rel='alternate stylesheet' type='text/css' href='normative-only.css' title='Notes and examples hidden'/></head><body><div class='wrapper'><h1 ><a class='secnum' style='min-width:50pt'>5</a> Quantities and units library <a class='abbr_ref' href='index.html#quantities'>[quantities]</a></h1><h2 ><a class='secnum' style='min-width:65pt'>5.5</a> Representation <a class='abbr_ref'>[qty.rep]</a></h2><div id='general' class='section'><h3 ><a class='secnum' href='#general' style='min-width:80pt'>5.5.1</a> General <a class='abbr_ref' href='qty.rep.general.html'>[qty.rep.general]</a></h3><div class='para' id='general-1'><div class='marginalizedparent'><a class='marginalized' href='#general-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3682'>#</a></div><div class='texpara'><div id='general-1.sentence-1' class='sentence'>Subclause [qty.<span class='shy'></span>rep] specifies the components
used to constrain the numerical value of a quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-29">IEC 60050, 112-01-29</a>)<a class='hidden_link' href='#general-1.sentence-1'>.</a></div></div></div></div><div id='traits' class='section'><h3 ><a class='secnum' href='#traits' style='min-width:80pt'>5.5.2</a> Traits <a class='abbr_ref' href='qty.rep.traits.html'>[qty.rep.traits]</a></h3><div id='qty.fp.traits' class='section'><h4 ><a class='secnum' href='#qty.fp.traits' style='min-width:95pt'>5.5.2.1</a> Floating-point <a class='abbr_ref' href='qty.fp.traits.html'>[qty.fp.traits]</a></h4><div class='texpara'><div class='itemdecl' id='qty.fp.traits-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#qty.fp.traits-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <span class='texttt'><i >actual-value-type</i></span> <span class='operator'>:</span> <span class='texttt'><i >cond-value-type</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>; <span class='comment'>// see <a href="https://wg21.link/readable.traits">N4971, [readable.traits]</a></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>std<span class='operator'>::</span>is_pointer_v<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='operator'>!</span>std<span class='operator'>::</span>is_array_v<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='keyword'>requires</span> <span class='curlybracket'>{</span> <span class='keyword'>typename</span> std<span class='operator'>::</span>indirectly_readable_traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>value_type; <span class='curlybracket'>}</span>
<span class='keyword'>struct</span> <span class='texttt'><i >actual-value-type</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>:</span> std<span class='operator'>::</span>indirectly_readable_traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>using</span> <span class='texttt'><i >actual-value-type-t</i></span> <span class='operator'>=</span> <span class='texttt'><i >actual-value-type</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>value_type;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> <span id='lib:treat_as_floating_point'><a class='hidden_link' href='#lib:treat_as_floating_point' title='5.5.2.1&emsp;Floating-point&emsp;[qty.fp.traits]'>treat_as_floating_point</a></span> <span class='operator'>=</span>
std<span class='operator'>::</span>chrono<span class='operator'>::</span>treat_as_floating_point_v<span class='anglebracket'>&lt;</span><span class='texttt'><i >actual-value-type-t</i></span><span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
</code></div></div><div class='para' id='qty.fp.traits-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.fp.traits-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3708'>#</a></div><div class='texpara'><div id='qty.fp.traits-1.sentence-1' class='sentence'><span class='texttt'>quantity</span> and <span class='texttt'>quantity_<span class='shy'></span>point</span> use <span class='texttt'>treat_<span class='shy'></span>as_<span class='shy'></span>floating_<span class='shy'></span>point</span>
to help determine whether implicit conversions are allowed among them<a class='hidden_link' href='#qty.fp.traits-1.sentence-1'>.</a></div></div></div></div><div class='para' id='qty.fp.traits-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.fp.traits-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3712'>#</a></div><div class='texpara'><div id='qty.fp.traits-2.sentence-1' class='sentence'><i >Remarks</i>: Pursuant to <a href="https://wg21.link/namespace.std">N4971, [namespace.std]</a> (<a href='spec.ext.html' title='4.1&emsp;External'>[spec.<span class='shy'></span>ext]</a>),
users may specialize <span class='texttt'>treat_<span class='shy'></span>as_<span class='shy'></span>floating_<span class='shy'></span>point</span>
for cv-unqualified program-defined types<a class='hidden_link' href='#qty.fp.traits-2.sentence-1'>.</a></div> <div id='qty.fp.traits-2.sentence-2' class='sentence'>Such specializations shall be usable in constant expressions (<a href="https://wg21.link/expr.const">N4971, [expr.const]</a>)
and have type <span class='texttt'><span class='keyword'>const</span> <span class='keyword'>bool</span></span><a class='hidden_link' href='#qty.fp.traits-2.sentence-2'>.</a></div></div></div></div></div><div id='qty.char.traits' class='section'><h4 ><a class='secnum' href='#qty.char.traits' style='min-width:95pt'>5.5.2.2</a> Quantity character <a class='abbr_ref' href='qty.char.traits.html'>[qty.char.traits]</a></h4><div class='texpara'><div id='lib:disable_vector'><div id='lib:disable_complex'><div id='lib:disable_scalar'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:disable_scalar'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> disable_scalar <span class='operator'>=</span> <span class='literal'>false</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> disable_complex <span class='operator'>=</span> <span class='literal'>false</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> disable_vector <span class='operator'>=</span> <span class='literal'>false</span>;
</code></div></div></div></div></div><div class='para' id='qty.char.traits-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.char.traits-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3736'>#</a></div><div class='texpara'><div id='qty.char.traits-1.sentence-1' class='sentence'>Some quantities are defined as having a numerical value (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-29">IEC 60050, 112-01-29</a>) of a specific set (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-01-02">IEC 60050, 102-01-02</a>)<a class='hidden_link' href='#qty.char.traits-1.sentence-1'>.</a></div> <div id='qty.char.traits-1.sentence-2' class='sentence'>The representation concepts use these traits
to help determine the sets <span class='texttt'>T</span> represents<a class='hidden_link' href='#qty.char.traits-1.sentence-2'>.</a></div></div></div></div><div class='para' id='qty.char.traits-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.char.traits-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3741'>#</a></div><div class='texpara'><div id='qty.char.traits-2.sentence-1' class='sentence'><i >Remarks</i>: Pursuant to <a href="https://wg21.link/namespace.std">N4971, [namespace.std]</a> (<a href='spec.ext.html' title='4.1&emsp;External'>[spec.<span class='shy'></span>ext]</a>),
users may specialize these templates
for cv-unqualified program-defined types<a class='hidden_link' href='#qty.char.traits-2.sentence-1'>.</a></div> <div id='qty.char.traits-2.sentence-2' class='sentence'>Such specializations shall be usable in constant expressions (<a href="https://wg21.link/expr.const">N4971, [expr.const]</a>)
and have type <span class='texttt'><span class='keyword'>const</span> <span class='keyword'>bool</span></span><a class='hidden_link' href='#qty.char.traits-2.sentence-2'>.</a></div></div></div></div><div class='para nonNormativeOnly' id='qty.char.traits-3'><div class='marginalizedparent'><a class='marginalized' href='#qty.char.traits-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3749'>#</a></div><div class='texpara'><div id='qty.char.traits-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#qty.char.traits-note-1'>1</a></i>:&ensp;<div id='qty.char.traits-3.sentence-1' class='sentence'>These templates prevent use of representation types with the library
that satisfy but do not in fact model their corresponding concept<a class='hidden_link' href='#qty.char.traits-3.sentence-1'>.</a></div>&nbsp;<i>end note</i>]</div></div></div></div></div></div><div id='qty.val.traits' class='section'><h4 ><a class='secnum' href='#qty.val.traits' style='min-width:95pt'>5.5.2.3</a> Values <a class='abbr_ref' href='qty.val.traits.html'>[qty.val.traits]</a></h4><div class='para' id='qty.val.traits-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.val.traits-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3758'>#</a></div><div class='texpara'><div id='qty.val.traits-1.sentence-1' class='sentence'><span class='texttt'>quantity</span> and <span class='texttt'>quantity_<span class='shy'></span>point</span> use <span class='texttt'>representation_<span class='shy'></span>values</span>
to construct special values of its representation type<a class='hidden_link' href='#qty.val.traits-1.sentence-1'>.</a></div></div><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <span id='lib:representation_values'><a class='hidden_link' href='#lib:representation_values' title='5.5.2.3&emsp;Values&emsp;[qty.val.traits]'>representation_values</a></span> <span class='operator'>:</span> std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration_values<span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> Rep one<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></div></div><div class='para' id='qty.val.traits-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.val.traits-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3773'>#</a></div><div class='texpara'><div id='qty.val.traits-2.sentence-1' class='sentence'>The requirements on <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>chrono<span class='operator'>&#x200b;::&#x200b;</span>duration_<span class='shy'></span>values<span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span></span> (<a href="https://wg21.link/time.traits.duration.values">N4971, [time.traits.duration.values]</a>)
also apply to <span class='texttt'>representation_<span class='shy'></span>values<span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.val.traits-2.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='qty.val.traits-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#qty.val.traits-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>static</span> <span class='keyword'>constexpr</span> Rep one<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
</code></div></div><div class='para' id='qty.val.traits-3'><div class='marginalizedparent'><a class='marginalized' href='#qty.val.traits-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3782'>#</a></div><div class='texpara'><div id='qty.val.traits-3.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>Rep<span class='parenthesis'>(</span><span class='literal'>1</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.val.traits-3.sentence-1'>.</a></div></div></div></div><div class='para' id='qty.val.traits-4'><div class='marginalizedparent'><a class='marginalized' href='#qty.val.traits-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3786'>#</a></div><div class='texpara'><div id='qty.val.traits-4.sentence-1' class='sentence'><i >Remarks</i>: The value returned shall be the neutral element for multiplication (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-01-19">IEC 60050, 102-01-19</a>)<a class='hidden_link' href='#qty.val.traits-4.sentence-1'>.</a></div></div></div></div></div></div><div id='cpos' class='section'><h3 ><a class='secnum' href='#cpos' style='min-width:80pt'>5.5.3</a> Customization point objects <a class='abbr_ref' href='qty.rep.cpos.html'>[qty.rep.cpos]</a></h3><div id='cpos.general' class='section'><h4 ><a class='secnum' href='#cpos.general' style='min-width:95pt'>5.5.3.1</a> General <a class='abbr_ref' href='qty.rep.cpos.general.html'>[qty.rep.cpos.general]</a></h4><div class='para' id='cpos.general-1'><div class='marginalizedparent'><a class='marginalized' href='#cpos.general-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3795'>#</a></div><div class='texpara'><div id='cpos.general-1.sentence-1' class='sentence'>Within subclause <a href='#cpos' title='5.5.3&emsp;Customization point objects'>[qty.<span class='shy'></span>rep.<span class='shy'></span>cpos]</a>,
<a class='hidden_link' href='#def:reified_object' id='def:reified_object'><i>reified object</i></a> is as defined in <a href="https://wg21.link/range.access.general">N4971, [range.access.general]</a><a class='hidden_link' href='#cpos.general-1.sentence-1'>.</a></div></div></div></div><div id='qty.real.cpo' class='section'><h4 ><a class='secnum' href='#qty.real.cpo' style='min-width:95pt'>5.5.3.2</a> <span class='texttt'>mp_<span class='shy'></span>units&#x200b;::&#x200b;real</span> <a class='abbr_ref' href='qty.real.cpo.html'>[qty.real.cpo]</a></h4><div class='para' id='qty.real.cpo-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.real.cpo-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3801'>#</a></div><div class='texpara'><div id='qty.real.cpo-1.sentence-1' class='sentence'>The name <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>real</span> denotes a customization point object (<a href="https://wg21.link/customization.point.object">N4971, [customization.point.object]</a>)<a class='hidden_link' href='#qty.real.cpo-1.sentence-1'>.</a></div></div></div><div class='para' id='qty.real.cpo-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.real.cpo-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3804'>#</a></div><div class='texpara'><div id='qty.real.cpo-2.sentence-1' class='sentence'>Given a subexpression <span class='texttt'>E</span> with type <span class='texttt'>T</span>,
let <span class='texttt'>t</span> be an lvalue that denotes the reified object for <span class='texttt'>E</span><a class='hidden_link' href='#qty.real.cpo-2.sentence-1'>.</a></div> <div id='qty.real.cpo-2.sentence-2' class='sentence'>Then:
<ul class='itemize'><li id='qty.real.cpo-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.real.cpo-2.1'>(2.1)</a></div><div class='texpara'><div id='qty.real.cpo-2.1.sentence-1' class='sentence'>If <span class='texttt'>T</span> does not model <a href='#concept:WeaklyRegular' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:WeaklyRegular'><span class='texttt'><i >WeaklyRegular</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>real<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is ill-formed<a class='hidden_link' href='#qty.real.cpo-2.1.sentence-1'>.</a></div></div></li><li id='qty.real.cpo-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.real.cpo-2.2'>(2.2)</a></div><div class='texpara'><div id='qty.real.cpo-2.2.sentence-1' class='sentence'>If <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>real<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar'><span class='texttt'><i >Scalar</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>real<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>real<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.real.cpo-2.2.sentence-1'>.</a></div></div></li><li id='qty.real.cpo-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.real.cpo-2.3'>(2.3)</a></div><div class='texpara'><div id='qty.real.cpo-2.3.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>T</span> is a class or enumeration type and
<span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>real<span class='parenthesis'>(</span>t<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar_'><span class='texttt'><i >Scalar</i></span></span></a>
where the meaning of <span class='texttt'>real</span> is established as-if by performing argument-dependent lookup only (<a href="https://wg21.link/basic.lookup.argdep">N4971, [basic.lookup.argdep]</a>),
then <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>real<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to that expression<a class='hidden_link' href='#qty.real.cpo-2.3.sentence-1'>.</a></div></div></li><li id='qty.real.cpo-2.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.real.cpo-2.4'>(2.4)</a></div><div class='texpara'><div id='qty.real.cpo-2.4.sentence-1' class='sentence'>Otherwise, <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>real<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is ill-formed<a class='hidden_link' href='#qty.real.cpo-2.4.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div id='qty.imag.cpo' class='section'><h4 ><a class='secnum' href='#qty.imag.cpo' style='min-width:95pt'>5.5.3.3</a> <span class='texttt'>mp_<span class='shy'></span>units&#x200b;::&#x200b;imag</span> <a class='abbr_ref' href='qty.imag.cpo.html'>[qty.imag.cpo]</a></h4><div class='para' id='qty.imag.cpo-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.imag.cpo-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3826'>#</a></div><div class='texpara'><div id='qty.imag.cpo-1.sentence-1' class='sentence'>The name <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>imag</span> denotes a customization point object (<a href="https://wg21.link/customization.point.object">N4971, [customization.point.object]</a>)<a class='hidden_link' href='#qty.imag.cpo-1.sentence-1'>.</a></div></div></div><div class='para' id='qty.imag.cpo-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.imag.cpo-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3829'>#</a></div><div class='texpara'><div id='qty.imag.cpo-2.sentence-1' class='sentence'>Given a subexpression <span class='texttt'>E</span> with type <span class='texttt'>T</span>,
let <span class='texttt'>t</span> be an lvalue that denotes the reified object for <span class='texttt'>E</span><a class='hidden_link' href='#qty.imag.cpo-2.sentence-1'>.</a></div> <div id='qty.imag.cpo-2.sentence-2' class='sentence'>Then:
<ul class='itemize'><li id='qty.imag.cpo-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.imag.cpo-2.1'>(2.1)</a></div><div class='texpara'><div id='qty.imag.cpo-2.1.sentence-1' class='sentence'>If <span class='texttt'>T</span> does not model <a href='#concept:WeaklyRegular' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:WeaklyRegular_'><span class='texttt'><i >WeaklyRegular</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>imag<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is ill-formed<a class='hidden_link' href='#qty.imag.cpo-2.1.sentence-1'>.</a></div></div></li><li id='qty.imag.cpo-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.imag.cpo-2.2'>(2.2)</a></div><div class='texpara'><div id='qty.imag.cpo-2.2.sentence-1' class='sentence'>If <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>imag<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar__'><span class='texttt'><i >Scalar</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>imag<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>imag<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.imag.cpo-2.2.sentence-1'>.</a></div></div></li><li id='qty.imag.cpo-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.imag.cpo-2.3'>(2.3)</a></div><div class='texpara'><div id='qty.imag.cpo-2.3.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>T</span> is a class or enumeration type and
<span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>imag<span class='parenthesis'>(</span>t<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar___'><span class='texttt'><i >Scalar</i></span></span></a>
where the meaning of <span class='texttt'>imag</span> is established as-if by performing argument-dependent lookup only (<a href="https://wg21.link/basic.lookup.argdep">N4971, [basic.lookup.argdep]</a>),
then <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>imag<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to that expression<a class='hidden_link' href='#qty.imag.cpo-2.3.sentence-1'>.</a></div></div></li><li id='qty.imag.cpo-2.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.imag.cpo-2.4'>(2.4)</a></div><div class='texpara'><div id='qty.imag.cpo-2.4.sentence-1' class='sentence'>Otherwise, <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>imag<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is ill-formed<a class='hidden_link' href='#qty.imag.cpo-2.4.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div id='qty.modulus.cpo' class='section'><h4 ><a class='secnum' href='#qty.modulus.cpo' style='min-width:95pt'>5.5.3.4</a> <span class='texttt'>mp_<span class='shy'></span>units&#x200b;::&#x200b;modulus</span> <a class='abbr_ref' href='qty.modulus.cpo.html'>[qty.modulus.cpo]</a></h4><div class='para' id='qty.modulus.cpo-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.modulus.cpo-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3851'>#</a></div><div class='texpara'><div id='qty.modulus.cpo-1.sentence-1' class='sentence'>The name <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>modulus</span> denotes a customization point object (<a href="https://wg21.link/customization.point.object">N4971, [customization.point.object]</a>)<a class='hidden_link' href='#qty.modulus.cpo-1.sentence-1'>.</a></div></div></div><div class='para' id='qty.modulus.cpo-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.modulus.cpo-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3854'>#</a></div><div class='texpara'><div id='qty.modulus.cpo-2.sentence-1' class='sentence'>Given a subexpression <span class='texttt'>E</span> with type <span class='texttt'>T</span>,
let <span class='texttt'>t</span> be an lvalue that denotes the reified object for <span class='texttt'>E</span><a class='hidden_link' href='#qty.modulus.cpo-2.sentence-1'>.</a></div> <div id='qty.modulus.cpo-2.sentence-2' class='sentence'>Then:
<ul class='itemize'><li id='qty.modulus.cpo-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.modulus.cpo-2.1'>(2.1)</a></div><div class='texpara'><div id='qty.modulus.cpo-2.1.sentence-1' class='sentence'>If <span class='texttt'>T</span> does not model <a href='#concept:WeaklyRegular' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:WeaklyRegular__'><span class='texttt'><i >WeaklyRegular</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>modulus<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is ill-formed<a class='hidden_link' href='#qty.modulus.cpo-2.1.sentence-1'>.</a></div></div></li><li id='qty.modulus.cpo-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.modulus.cpo-2.2'>(2.2)</a></div><div class='texpara'><div id='qty.modulus.cpo-2.2.sentence-1' class='sentence'>If <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>modulus<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar____'><span class='texttt'><i >Scalar</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>modulus<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>modulus<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.modulus.cpo-2.2.sentence-1'>.</a></div></div></li><li id='qty.modulus.cpo-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.modulus.cpo-2.3'>(2.3)</a></div><div class='texpara'><div id='qty.modulus.cpo-2.3.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>T</span> is a class or enumeration type and
<span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>modulus<span class='parenthesis'>(</span>t<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar_____'><span class='texttt'><i >Scalar</i></span></span></a>
where the meaning of <span class='texttt'>modulus</span> is established as-if by performing argument-dependent lookup only (<a href="https://wg21.link/basic.lookup.argdep">N4971, [basic.lookup.argdep]</a>),
then <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>modulus<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to that expression<a class='hidden_link' href='#qty.modulus.cpo-2.3.sentence-1'>.</a></div></div></li><li id='qty.modulus.cpo-2.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.modulus.cpo-2.4'>(2.4)</a></div><div class='texpara'><div id='qty.modulus.cpo-2.4.sentence-1' class='sentence'>If <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>abs<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar______'><span class='texttt'><i >Scalar</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>modulus<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>abs<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.modulus.cpo-2.4.sentence-1'>.</a></div></div></li><li id='qty.modulus.cpo-2.5'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.modulus.cpo-2.5'>(2.5)</a></div><div class='texpara'><div id='qty.modulus.cpo-2.5.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>T</span> is a class or enumeration type and
<span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>abs<span class='parenthesis'>(</span>t<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar_______'><span class='texttt'><i >Scalar</i></span></span></a>
where the meaning of <span class='texttt'>abs</span> is established as-if by performing argument-dependent lookup only (<a href="https://wg21.link/basic.lookup.argdep">N4971, [basic.lookup.argdep]</a>),
then <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>modulus<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to that expression<a class='hidden_link' href='#qty.modulus.cpo-2.5.sentence-1'>.</a></div></div></li><li id='qty.modulus.cpo-2.6'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.modulus.cpo-2.6'>(2.6)</a></div><div class='texpara'><div id='qty.modulus.cpo-2.6.sentence-1' class='sentence'>Otherwise, <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>modulus<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is ill-formed<a class='hidden_link' href='#qty.modulus.cpo-2.6.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div id='qty.mag.cpo' class='section'><h4 ><a class='secnum' href='#qty.mag.cpo' style='min-width:95pt'>5.5.3.5</a> <span class='texttt'>mp_<span class='shy'></span>units&#x200b;::&#x200b;magnitude</span> <a class='abbr_ref' href='qty.mag.cpo.html'>[qty.mag.cpo]</a></h4><div class='para' id='qty.mag.cpo-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.mag.cpo-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3884'>#</a></div><div class='texpara'><div id='qty.mag.cpo-1.sentence-1' class='sentence'>The name <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>magnitude</span> denotes a customization point object (<a href="https://wg21.link/customization.point.object">N4971, [customization.point.object]</a>)<a class='hidden_link' href='#qty.mag.cpo-1.sentence-1'>.</a></div></div></div><div class='para' id='qty.mag.cpo-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.mag.cpo-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3887'>#</a></div><div class='texpara'><div id='qty.mag.cpo-2.sentence-1' class='sentence'>Given a subexpression <span class='texttt'>E</span> with type <span class='texttt'>T</span>,
let <span class='texttt'>t</span> be an lvalue that denotes the reified object for <span class='texttt'>E</span><a class='hidden_link' href='#qty.mag.cpo-2.sentence-1'>.</a></div> <div id='qty.mag.cpo-2.sentence-2' class='sentence'>Then:
<ul class='itemize'><li id='qty.mag.cpo-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.mag.cpo-2.1'>(2.1)</a></div><div class='texpara'><div id='qty.mag.cpo-2.1.sentence-1' class='sentence'>If <span class='texttt'>T</span> does not model <a href='#concept:WeaklyRegular' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:WeaklyRegular___'><span class='texttt'><i >WeaklyRegular</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>magnitude<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is ill-formed<a class='hidden_link' href='#qty.mag.cpo-2.1.sentence-1'>.</a></div></div></li><li id='qty.mag.cpo-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.mag.cpo-2.2'>(2.2)</a></div><div class='texpara'><div id='qty.mag.cpo-2.2.sentence-1' class='sentence'>If <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>magnitude<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar________'><span class='texttt'><i >Scalar</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>magnitude<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>magnitude<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.mag.cpo-2.2.sentence-1'>.</a></div></div></li><li id='qty.mag.cpo-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.mag.cpo-2.3'>(2.3)</a></div><div class='texpara'><div id='qty.mag.cpo-2.3.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>T</span> is a class or enumeration type and
<span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>magnitude<span class='parenthesis'>(</span>t<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar_________'><span class='texttt'><i >Scalar</i></span></span></a>
where the meaning of <span class='texttt'>magnitude</span> is established as-if by performing argument-dependent lookup only (<a href="https://wg21.link/basic.lookup.argdep">N4971, [basic.lookup.argdep]</a>),
then <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>magnitude<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to that expression<a class='hidden_link' href='#qty.mag.cpo-2.3.sentence-1'>.</a></div></div></li><li id='qty.mag.cpo-2.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.mag.cpo-2.4'>(2.4)</a></div><div class='texpara'><div id='qty.mag.cpo-2.4.sentence-1' class='sentence'>Otherwise, if <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>abs<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar__________'><span class='texttt'><i >Scalar</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>magnitude<span class='parenthesis'>(</span>&#x200b;E<span class='parenthesis'>)</span></span> is expression-equivalent to <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>abs<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.mag.cpo-2.4.sentence-1'>.</a></div></div></li><li id='qty.mag.cpo-2.5'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.mag.cpo-2.5'>(2.5)</a></div><div class='texpara'><div id='qty.mag.cpo-2.5.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>T</span> is a class or enumeration type and
<span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>abs<span class='parenthesis'>(</span>t<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar___________'><span class='texttt'><i >Scalar</i></span></span></a>
where the meaning of <span class='texttt'>magnitude</span> is established as-if by performing argument-dependent lookup only (<a href="https://wg21.link/basic.lookup.argdep">N4971, [basic.lookup.argdep]</a>),
then <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>magnitude<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to that expression<a class='hidden_link' href='#qty.mag.cpo-2.5.sentence-1'>.</a></div></div></li><li id='qty.mag.cpo-2.6'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.mag.cpo-2.6'>(2.6)</a></div><div class='texpara'><div id='qty.mag.cpo-2.6.sentence-1' class='sentence'>Otherwise, <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>magnitude<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is ill-formed<a class='hidden_link' href='#qty.mag.cpo-2.6.sentence-1'>.</a></div></div></li></ul></div></div></div></div></div><div id='concepts' class='section'><h3 ><a class='secnum' href='#concepts' style='min-width:80pt'>5.5.4</a> Concepts <a class='abbr_ref' href='qty.rep.concepts.html'>[qty.rep.concepts]</a></h3><div class='texpara'><div class='itemdecl' id='concepts-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#concepts-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >WeaklyRegular</i></span><a class='index' id='concept:WeaklyRegular'></a> <span class='operator'>=</span> std<span class='operator'>::</span>copyable<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> std<span class='operator'>::</span>equality_comparable<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >Scalar</i></span><a class='index' id='concept:Scalar'></a> <span class='operator'>=</span> <span class='parenthesis'>(</span><span class='operator'>!</span>disable_scalar<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:WeaklyRegular____'></a><span class='texttt'><i >WeaklyRegular</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='keyword'>requires</span><span class='parenthesis'>(</span>T a, T b<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='comment'>// <i >exposition only</i></span>
<span class='comment'>// scalar operations</span>
<span class='curlybracket'>{</span> <span class='operator'>-</span>a <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>+</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>-</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>*</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>/</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>;
</code></div></div><div class='para' id='concepts-1'><div class='marginalizedparent'><a class='marginalized' href='#concepts-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3932'>#</a></div><div class='texpara'><div id='concepts-1.sentence-1' class='sentence'>TBD<a class='hidden_link' href='#concepts-1.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='concept:Complex'><div class='marginalizedparent'><a class='itemDeclLink' href='#concept:Complex'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>using</span> <span class='texttt'><i >value-type-t</i></span> <span class='operator'>=</span> <span class='texttt'><i >actual-value-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>; <span class='comment'>// <i >exposition only</i>, see <a href='#qty.fp.traits' title='5.5.2.1&emsp;Floating-point'>[qty.<span class='shy'></span>fp.<span class='shy'></span>traits]</a></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >Complex</i></span><a class='index' id='concept:Complex'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<span class='parenthesis'>(</span><span class='operator'>!</span>disable_complex<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:WeaklyRegular_____'></a><span class='texttt'><i >WeaklyRegular</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:Scalar____________'></a><span class='texttt'><i >Scalar</i></span><span class='anglebracket'>&lt;</span><span class='texttt'><i >value-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span>T, <span class='texttt'><i >value-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, <span class='texttt'><i >value-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>T a, T b, <span class='texttt'><i >value-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> s<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='comment'>// complex operations</span>
<span class='curlybracket'>{</span> <span class='operator'>-</span>a <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>+</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>-</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>*</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>/</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>*</span> s <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> s <span class='operator'>*</span> a <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>/</span> s <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='operator'>::</span>mp_units<span class='operator'>::</span>real<span class='parenthesis'>(</span>a<span class='parenthesis'>)</span>;
<span class='operator'>::</span>mp_units<span class='operator'>::</span>imag<span class='parenthesis'>(</span>a<span class='parenthesis'>)</span>;
<span class='operator'>::</span>mp_units<span class='operator'>::</span>modulus<span class='parenthesis'>(</span>a<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>;
</code></div></div><div class='para' id='concepts-2'><div class='marginalizedparent'><a class='marginalized' href='#concepts-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3959'>#</a></div><div class='texpara'><div id='concepts-2.sentence-1' class='sentence'>TBD<a class='hidden_link' href='#concepts-2.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='concept:Vector'><div class='marginalizedparent'><a class='itemDeclLink' href='#concept:Vector'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >Vector</i></span><a class='index' id='concept:Vector'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<span class='parenthesis'>(</span><span class='operator'>!</span>disable_vector<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:WeaklyRegular______'></a><span class='texttt'><i >WeaklyRegular</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:Scalar_____________'></a><span class='texttt'><i >Scalar</i></span><span class='anglebracket'>&lt;</span><span class='texttt'><i >value-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>T a, T b, <span class='texttt'><i >value-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> s<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='comment'>// vector operations</span>
<span class='curlybracket'>{</span> <span class='operator'>-</span>a <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>+</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>-</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>*</span> s <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> s <span class='operator'>*</span> a <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>/</span> s <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='operator'>::</span>mp_units<span class='operator'>::</span>magnitude<span class='parenthesis'>(</span>a<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>;
</code></div></div><div class='para' id='concepts-3'><div class='marginalizedparent'><a class='marginalized' href='#concepts-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3978'>#</a></div><div class='texpara'><div id='concepts-3.sentence-1' class='sentence'>TBD<a class='hidden_link' href='#concepts-3.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='concept:ScalarRepresentation'><div class='marginalizedparent'><a class='itemDeclLink' href='#concept:ScalarRepresentation'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>using</span> <span class='texttt'><i >scaling-factor-type-t</i></span> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
std<span class='operator'>::</span>conditional_t<span class='anglebracket'>&lt;</span>treat_as_floating_point<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, <span class='keyword'>long</span> <span class='keyword'>double</span>, std<span class='operator'>::</span>intmax_t<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >ScalarRepresentation</i></span><a class='index' id='concept:ScalarRepresentation'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<span class='parenthesis'>(</span><span class='operator'>!</span><span class='texttt'><i >is-specialization-of</i></span><span class='anglebracket'>&lt;</span>T, quantity<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:Scalar______________'></a><span class='texttt'><i >Scalar</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>T a, T b, <span class='texttt'><i >scaling-factor-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> f<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='comment'>// scaling</span>
<span class='curlybracket'>{</span> a <span class='operator'>*</span> f <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> f <span class='operator'>*</span> a <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>/</span> f <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>;
</code></div></div><div class='para' id='concepts-4'><div class='marginalizedparent'><a class='marginalized' href='#concepts-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3997'>#</a></div><div class='texpara'><div id='concepts-4.sentence-1' class='sentence'>TBD<a class='hidden_link' href='#concepts-4.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='concept:ComplexRepresentation'><div class='marginalizedparent'><a class='itemDeclLink' href='#concept:ComplexRepresentation'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >ComplexRepresentation</i></span><a class='index' id='concept:ComplexRepresentation'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<span class='parenthesis'>(</span><span class='operator'>!</span><span class='texttt'><i >is-specialization-of</i></span><span class='anglebracket'>&lt;</span>T, quantity<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:Complex'></a><span class='texttt'><i >Complex</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>T a, T b, <span class='texttt'><i >scaling-factor-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> f<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='comment'>// scaling</span>
<span class='curlybracket'>{</span> a <span class='operator'>*</span> T<span class='parenthesis'>(</span>f<span class='parenthesis'>)</span> <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> T<span class='parenthesis'>(</span>f<span class='parenthesis'>)</span> <span class='operator'>*</span> a <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>/</span> T<span class='parenthesis'>(</span>f<span class='parenthesis'>)</span> <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>;
</code></div></div><div class='para' id='concepts-5'><div class='marginalizedparent'><a class='marginalized' href='#concepts-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L4012'>#</a></div><div class='texpara'><div id='concepts-5.sentence-1' class='sentence'>TBD<a class='hidden_link' href='#concepts-5.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='concept:VectorRepresentation'><div class='marginalizedparent'><a class='itemDeclLink' href='#concept:VectorRepresentation'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >VectorRepresentation</i></span><a class='index' id='concept:VectorRepresentation'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<span class='parenthesis'>(</span><span class='operator'>!</span><span class='texttt'><i >is-specialization-of</i></span><span class='anglebracket'>&lt;</span>T, quantity<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:Vector'></a><span class='texttt'><i >Vector</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
</code></div></div><div class='para' id='concepts-6'><div class='marginalizedparent'><a class='marginalized' href='#concepts-6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L4021'>#</a></div><div class='texpara'><div id='concepts-6.sentence-1' class='sentence'>TBD<a class='hidden_link' href='#concepts-6.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='concept:Representation'><div class='marginalizedparent'><a class='itemDeclLink' href='#concept:Representation'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='concept:Representation'><span id='lib:Representation'><span class='texttt'>Representation</span></span></span></a> <span class='operator'>=</span> <a class='index' id='conceptref:ScalarRepresentation'></a><span class='texttt'><i >ScalarRepresentation</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span> <a class='index' id='conceptref:ComplexRepresentation'></a><span class='texttt'><i >ComplexRepresentation</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span>
<a class='index' id='conceptref:VectorRepresentation'></a><span class='texttt'><i >VectorRepresentation</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
</code></div></div><div class='para' id='concepts-7'><div class='marginalizedparent'><a class='marginalized' href='#concepts-7'>7</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L4030'>#</a></div><div class='texpara'><div id='concepts-7.sentence-1' class='sentence'>A type <span class='texttt'>T</span> models <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation'><span class='texttt'>Representation</span></span></a> if
it represents the numerical value of a quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-29">IEC 60050, 112-01-29</a>)<a class='hidden_link' href='#concepts-7.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='concepts-itemdecl:8'><div class='marginalizedparent'><a class='itemDeclLink' href='#concepts-itemdecl:8'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, quantity_character Ch<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >IsOfCharacter</i></span><a class='index' id='concept:IsOfCharacter'></a> <span class='operator'>=</span> <span class='parenthesis'>(</span>Ch <span class='operator'>=</span><span class='operator'>=</span> quantity_character<span class='operator'>::</span>scalar <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:Scalar_______________'></a><span class='texttt'><i >Scalar</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span> <span class='comment'>// <i >exposition only</i></span>
<span class='parenthesis'>(</span>Ch <span class='operator'>=</span><span class='operator'>=</span> quantity_character<span class='operator'>::</span>complex <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:Complex_'></a><span class='texttt'><i >Complex</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
<span class='parenthesis'>(</span>Ch <span class='operator'>=</span><span class='operator'>=</span> quantity_character<span class='operator'>::</span>vector <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:Vector_'></a><span class='texttt'><i >Vector</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> V<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='concept:RepresentationOf'><span id='lib:RepresentationOf'><span class='texttt'>RepresentationOf</span></span></span></a> <span class='operator'>=</span>
<a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation_'><span class='texttt'>Representation</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span><span class='parenthesis'>(</span><a href='qty.spec.concepts.html#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>V<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span><a class='index' id='conceptref:QuantityKindSpec'></a><span class='texttt'><i >QuantityKindSpec</i></span><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>V<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span> <a class='index' id='conceptref:IsOfCharacter'></a><span class='texttt'><i >IsOfCharacter</i></span><span class='anglebracket'>&lt;</span>T, V<span class='operator'>.</span>character<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
<span class='parenthesis'>(</span>std<span class='operator'>::</span>same_as<span class='anglebracket'>&lt;</span>quantity_character, <span class='keyword'>decltype</span><span class='parenthesis'>(</span>V<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:IsOfCharacter_'></a><span class='texttt'><i >IsOfCharacter</i></span><span class='anglebracket'>&lt;</span>T, V<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div><div class='para' id='concepts-8'><div class='marginalizedparent'><a class='marginalized' href='#concepts-8'>8</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L4047'>#</a></div><div class='texpara'><div id='concepts-8.sentence-1' class='sentence'>A type <span class='texttt'>T</span> models <span class='texttt'><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>V<span class='anglebracket'>&gt;</span></span> if
<span class='texttt'>T</span> models <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation__'><span class='texttt'>Representation</span></span></a> and
<ul class='itemize'><li id='concepts-8.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#concepts-8.1'>(8.1)</a></div><span class='texttt'>V</span> is a kind of quantity, or</li><li id='concepts-8.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#concepts-8.2'>(8.2)</a></div>if <span class='texttt'>V</span> is a quantity, then <span class='texttt'>T</span> represents a value of its character, or</li><li id='concepts-8.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#concepts-8.3'>(8.3)</a></div>if <span class='texttt'>V</span> is a quantity character, then <span class='texttt'>T</span> represents a value of <span class='texttt'>V</span><a class='hidden_link' href='#concepts-8.sentence-1'>.</a></li></ul></div></div></div></div></div></body></html>