forked from mpusz/mp-units
466 lines
181 KiB
HTML
466 lines
181 KiB
HTML
<!DOCTYPE html><html lang='en'><head><title>[qty.unit]</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.4</a> Reference <a class='abbr_ref' href='qty.ref.html#qty.unit'>[qty.ref]</a></h2><h3 ><a class='secnum' style='min-width:80pt'>5.4.4</a> Unit <a class='abbr_ref'>[qty.unit]</a></h3><div id='general' class='section'><h4 ><a class='secnum' href='#general' style='min-width:95pt'>5.4.4.1</a> General <a class='abbr_ref' href='qty.unit.general.html'>[qty.unit.general]</a></h4><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#L2274'>#</a></div><div class='texpara'><div id='general-1.sentence-1' class='sentence'>Subclause [qty.<span class='shy'></span>unit] specifies the components
|
||
for defining a unit of measurement (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-14">IEC 60050, 112-01-14</a>)<a class='hidden_link' href='#general-1.sentence-1'>.</a></div></div></div></div><div id='mag' class='section'><h4 ><a class='secnum' href='#mag' style='min-width:95pt'>5.4.4.2</a> Magnitude <a class='abbr_ref' href='qty.unit.mag.html'>[qty.unit.mag]</a></h4><div id='mag.general' class='section'><h4 ><a class='secnum' href='#mag.general' style='min-width:110pt'>5.4.4.2.1</a> General <a class='abbr_ref' href='qty.unit.mag.general.html'>[qty.unit.mag.general]</a></h4><div class='para' id='mag.general-1'><div class='marginalizedparent'><a class='marginalized' href='#mag.general-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2282'>#</a></div><div class='texpara'><div id='mag.general-1.sentence-1' class='sentence'>Subclause <a href='#mag' title='5.4.4.2 Magnitude'>[qty.<span class='shy'></span>unit.<span class='shy'></span>mag]</a> specifies the components
|
||
used to represent the 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 unit
|
||
with support for powers (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-02-08">IEC 60050, 102-02-08</a>) of real numbers (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-02-05">IEC 60050, 102-02-05</a>)<a class='hidden_link' href='#mag.general-1.sentence-1'>.</a></div></div></div></div><div id='mag.concepts' class='section'><h4 ><a class='secnum' href='#mag.concepts' style='min-width:110pt'>5.4.4.2.2</a> Concepts <a class='abbr_ref' href='qty.unit.mag.concepts.html'>[qty.unit.mag.concepts]</a></h4><div class='texpara'><div class='itemdecl' id='mag.concepts-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#mag.concepts-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:MagConstant' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='concept:MagConstant'><span id='lib:MagConstant'><span class='texttt'>MagConstant</span></span></span></a> <span class='operator'>=</span> <a class='index' id='conceptref:SymbolicConstant'></a><span class='texttt'><i >SymbolicConstant</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'><</span>T, mag_constant<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='concept:UnitMagnitude'><span id='lib:UnitMagnitude'><span class='texttt'>UnitMagnitude</span></span></span></a> <span class='operator'>=</span> <span class='parenthesis'>(</span><span class='texttt'><i >is-specialization-of</i></span><span class='anglebracket'><</span>T, <span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >MagArg</i></span><a class='index' id='concept:MagArg'></a> <span class='operator'>=</span> std<span class='operator'>::</span>integral<span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>|</span><span class='operator'>|</span> <a href='#concept:MagConstant' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:MagConstant'><span class='texttt'>MagConstant</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span>; <span class='comment'>// <i >exposition only</i></span>
|
||
</code></div></div></div><div id='mag.types' class='section'><h4 ><a class='secnum' href='#mag.types' style='min-width:110pt'>5.4.4.2.3</a> Types <a class='abbr_ref' href='qty.unit.mag.types.html'>[qty.unit.mag.types]</a></h4><div class='texpara'><span id='lib:mag_constant'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mag_constant'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <span class='keyword'>long</span> <span class='keyword'>double</span> Value<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Value <span class='anglebracket'>></span> <span class='literal'>0</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>struct</span> mag_constant <span class='curlybracket'>{</span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>long</span> <span class='keyword'>double</span> <i >value</i> <span class='operator'>=</span> Value; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='texpara'><div id='mag.types-sentence-1' class='sentence'>A specialization of <span class='texttt'>mag_<span class='shy'></span>constant</span> represents a real number (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-02-05">IEC 60050, 102-02-05</a>)<a class='hidden_link' href='#mag.types-sentence-1'>.</a></div> <div id='mag.types-sentence-2' class='sentence'><span class='texttt'>Symbol</span> is its symbol, and
|
||
<span class='texttt'>Value</span> is (an approximation of) its value<a class='hidden_link' href='#mag.types-sentence-2'>.</a></div></div><div class='texpara'><span id='lib:unit-magnitude'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unit-magnitude'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Ms<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> <i >unit-magnitude</i> <span class='curlybracket'>{</span> <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='comment'>// <a href='#mag.ops' title='5.4.4.2.4 Operations'>[qty.<span class='shy'></span>unit.<span class='shy'></span>mag.<span class='shy'></span>ops]</a>, operations</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> M<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><i >unit-magnitude</i> lhs, M rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span><i >unit-magnitude</i> lhs, <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude__'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude___'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><i >unit-magnitude</i>, Rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>int</span> Num, <span class='keyword'>int</span> Den <span class='operator'>=</span> <span class='literal'>1</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <i >pow</i><span class='parenthesis'>(</span><i >unit-magnitude</i><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
|
||
<span class='comment'>// <a href='#mag.utils' title='5.4.4.2.5 Utilities'>[qty.<span class='shy'></span>unit.<span class='shy'></span>mag.<span class='shy'></span>utils]</a>, utilities</span>
|
||
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <i >is-positive-integral-power</i><span class='parenthesis'>(</span><i >unit-magnitude</i><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Ms2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <i >common-magnitude</i><span class='parenthesis'>(</span><i >unit-magnitude</i>, <span class='comment'>// <i >exposition only</i></span>
|
||
<i >unit-magnitude</i><span class='anglebracket'><</span>Ms2<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span><span class='parenthesis'>)</span>;
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='para' id='mag.types-1'><div class='marginalizedparent'><a class='marginalized' href='#mag.types-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2351'>#</a></div><div class='texpara'><div id='mag.types-1.sentence-1' class='sentence'>A specialization of <span class='texttt'><i >unit-magnitude</i></span>
|
||
represents the product of its template arguments<a class='hidden_link' href='#mag.types-1.sentence-1'>.</a></div></div></div><div class='para' id='mag.types-2'><div class='marginalizedparent'><a class='marginalized' href='#mag.types-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2355'>#</a></div><div class='texpara'><div id='mag.types-2.sentence-1' class='sentence'>For the purposes of specifying the implementation-defined limits,
|
||
let the representation of the terms of <span class='texttt'><i >unit-magnitude</i></span> be the structure
|
||
<span class='codeblock'><span class='keyword'>struct</span> <span class='curlybracket'>{</span>
|
||
<i >ratio</i> exp;
|
||
<i >base-type</i> base;
|
||
<span class='curlybracket'>}</span>;
|
||
</span>
|
||
representing the number <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">base</span></span></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.513em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.519em;">exp</span></span></span></span></span></span></span></span></span>,
|
||
where <span class='texttt'><i >base-type</i></span> is a model of <a href='#concept:MagArg' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:MagArg'><span class='texttt'><i >MagArg</i></span></span></a><a class='hidden_link' href='#mag.types-2.sentence-1'>.</a></div> <ul class='itemize'><li id='mag.types-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#mag.types-2.1'>(2.1)</a></div><div class='texpara'><div id='mag.types-2.1.sentence-1' class='sentence'>There is a single term for each <span class='texttt'><i >base-type</i></span><a class='hidden_link' href='#mag.types-2.1.sentence-1'>.</a></div></div></li><li id='mag.types-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#mag.types-2.2'>(2.2)</a></div><div class='texpara'><div id='mag.types-2.2.sentence-1' class='sentence'><span class='texttt'>exp<span class='operator'>.</span>num</span> is not expanded into base<a class='hidden_link' href='#mag.types-2.2.sentence-1'>.</a></div> <div id='mag.types-note-1' class='note'><div class='texpara'>[<i>Note <a href='#mag.types-note-1'>1</a></i>: <div id='mag.types-2.2.sentence-2' class='sentence'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">2</span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.591em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">3</span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">8</span></span></span></span></span> is not permitted<a class='hidden_link' href='#mag.types-2.2.sentence-2'>.</a></div> — <i>end note</i>]</div></div></div></li><li id='mag.types-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#mag.types-2.3'>(2.3)</a></div><div class='texpara'><div id='mag.types-2.3.sentence-1' class='sentence'><span class='texttt'>exp<span class='operator'>.</span>den</span> can reduce the base<a class='hidden_link' href='#mag.types-2.3.sentence-1'>.</a></div> <div id='mag.types-note-2' class='note'><div class='texpara'>[<i>Note <a href='#mag.types-note-2'>2</a></i>: <div id='mag.types-2.3.sentence-2' class='sentence'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">4</span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.607em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">/</span></span></span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">2</span></span></span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">2</span></span></span></span></span> is permitted<a class='hidden_link' href='#mag.types-2.3.sentence-2'>.</a></div> — <i>end note</i>]</div></div></div></li><li id='mag.types-2.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#mag.types-2.4'>(2.4)</a></div><div class='texpara'><div id='mag.types-2.4.sentence-1' class='sentence'>If the result of an operation on <span class='texttt'>std<span class='operator'>​::​</span>intmax_<span class='shy'></span>t</span> values is undefined,
|
||
the behavior is
|
||
<a class='index' id=':behavior_of_unit-magnitude_operations_that_do_not_fit_in_a_std::intmax_t'></a>implementation-defined<a class='hidden_link' href='#mag.types-2.4.sentence-1'>.</a></div></div></li></ul></div></div></div><div id='mag.ops' class='section'><h4 ><a class='secnum' href='#mag.ops' style='min-width:110pt'>5.4.4.2.4</a> Operations <a class='abbr_ref' href='qty.unit.mag.ops.html'>[qty.unit.mag.ops]</a></h4><div class='texpara'><div id='lib:UnitMagnitude,operator*'><div id='lib:operator*,UnitMagnitude'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,UnitMagnitude'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude____'><span class='texttt'>UnitMagnitude</span></span></a> M<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_____'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span> lhs, M rhs<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='mag.ops-1'><div class='marginalizedparent'><a class='marginalized' href='#mag.ops-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2394'>#</a></div><div class='texpara'><div id='mag.ops-1.sentence-1' class='sentence'><i >Returns</i>: <ul class='itemize'><li id='mag.ops-1.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#mag.ops-1.1'>(1.1)</a></div><div class='texpara'><div id='mag.ops-1.1.sentence-1' class='sentence'>If <span class='texttt'><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>Ms<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>0</span></span> is <span class='texttt'><span class='literal'>true</span></span>, returns <span class='texttt'>rhs</span><a class='hidden_link' href='#mag.ops-1.1.sentence-1'>.</a></div></div></li><li id='mag.ops-1.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#mag.ops-1.2'>(1.2)</a></div><div class='texpara'><div id='mag.ops-1.2.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>std<span class='operator'>​::​</span>is_<span class='shy'></span>same_<span class='shy'></span>v<span class='anglebracket'><</span>M, <span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'><</span><span class='anglebracket'>></span><span class='anglebracket'>></span></span>, returns <span class='texttt'>lhs</span><a class='hidden_link' href='#mag.ops-1.2.sentence-1'>.</a></div></div></li><li id='mag.ops-1.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#mag.ops-1.3'>(1.3)</a></div><div class='texpara'><div id='mag.ops-1.3.sentence-1' class='sentence'>Otherwise, returns an unspecified value equal to <span class='math'><span class='texttt'>lhs</span> ×<span class='texttt'>rhs</span></span><a class='hidden_link' href='#mag.ops-1.3.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='texpara'><div id='lib:UnitMagnitude,operator/'><div id='lib:operator/,UnitMagnitude'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator/,UnitMagnitude'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span> lhs, <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude______'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> rhs<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='mag.ops-2'><div class='marginalizedparent'><a class='marginalized' href='#mag.ops-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2412'>#</a></div><div class='texpara'><div id='mag.ops-2.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>lhs <span class='operator'>*</span> <span class='texttt'><i >pow</i></span><span class='anglebracket'><</span><span class='operator'>-</span><span class='literal'>1</span><span class='anglebracket'>></span><span class='parenthesis'>(</span>rhs<span class='parenthesis'>)</span></span><a class='hidden_link' href='#mag.ops-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:UnitMagnitude,operator=='><div id='lib:operator==,UnitMagnitude'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator==,UnitMagnitude'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_______'><span class='texttt'>UnitMagnitude</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span>, Rhs<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='mag.ops-3'><div class='marginalizedparent'><a class='marginalized' href='#mag.ops-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2424'>#</a></div><div class='texpara'><div id='mag.ops-3.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>std<span class='operator'>​::​</span>is_<span class='shy'></span>same_<span class='shy'></span>v<span class='anglebracket'><</span><span class='texttt'><i >unit-magnitude</i></span>, Rhs<span class='anglebracket'>></span></span><a class='hidden_link' href='#mag.ops-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:pow,UnitMagnitude'><div id='lib:UnitMagnitude,pow'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:UnitMagnitude,pow'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>int</span> Num, <span class='keyword'>int</span> Den <span class='operator'>=</span> <span class='literal'>1</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >pow</i></span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span> base<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
</code></div></div></div></div><div class='para' id='mag.ops-4'><div class='marginalizedparent'><a class='marginalized' href='#mag.ops-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2436'>#</a></div><div class='texpara'><div id='mag.ops-4.sentence-1' class='sentence'><i >Returns</i>: <ul class='itemize'><li id='mag.ops-4.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#mag.ops-4.1'>(4.1)</a></div><div class='texpara'><div id='mag.ops-4.1.sentence-1' class='sentence'>If <span class='texttt'>Num <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>0</span></span> is <span class='texttt'><span class='literal'>true</span></span>, returns <span class='texttt'><span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'><</span><span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span></span><a class='hidden_link' href='#mag.ops-4.1.sentence-1'>.</a></div></div></li><li id='mag.ops-4.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#mag.ops-4.2'>(4.2)</a></div><div class='texpara'><div id='mag.ops-4.2.sentence-1' class='sentence'>Otherwise, returns an unspecified value equal to <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">base</span></span></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.513em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">Num</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">/</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">Den</span></span></span></span></span></span></span></span></span></span></span><a class='hidden_link' href='#mag.ops-4.2.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='texpara'><div id='lib:mag'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mag'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:MagArg_'></a><span class='texttt'><i >MagArg</i></span> <span class='keyword'>auto</span> V<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> mag <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
|
||
</code></div></div></div><div class='para' id='mag.ops-5'><div class='marginalizedparent'><a class='marginalized' href='#mag.ops-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2453'>#</a></div><div class='texpara'><div id='mag.ops-5.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>V</span> is greater than <span class='math'>0</span><a class='hidden_link' href='#mag.ops-5.sentence-1'>.</a></div></div></div></div><div class='para' id='mag.ops-6'><div class='marginalizedparent'><a class='marginalized' href='#mag.ops-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2457'>#</a></div><div class='texpara'><div id='mag.ops-6.sentence-1' class='sentence'><i >Effects</i>: If <span class='texttt'><a href='#concept:MagConstant' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:MagConstant_'><span class='texttt'>MagConstant</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>V<span class='parenthesis'>)</span><span class='anglebracket'>></span></span> is satisfied,
|
||
initializes <span class='texttt'>mag</span> with <span class='texttt'><span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'><</span>V<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span></span><a class='hidden_link' href='#mag.ops-6.sentence-1'>.</a></div> <div id='mag.ops-6.sentence-2' class='sentence'>Otherwise, initializes <span class='texttt'>mag</span> with
|
||
an unspecified value equal to <span class='texttt'>V</span><a class='hidden_link' href='#mag.ops-6.sentence-2'>.</a></div></div></div></div><div class='texpara'><div id='lib:mag_ratio'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mag_ratio'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>intmax_t N, std<span class='operator'>::</span>intmax_t D<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>N <span class='anglebracket'>></span> <span class='literal'>0</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> mag_ratio <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
|
||
</code></div></div></div><div class='para' id='mag.ops-7'><div class='marginalizedparent'><a class='marginalized' href='#mag.ops-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2473'>#</a></div><div class='texpara'><div id='mag.ops-7.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>mag_<span class='shy'></span>ratio</span> with
|
||
an unspecified value equal to <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">N</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">/</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.225em;">D</span></span></span></span></span></span></span><a class='hidden_link' href='#mag.ops-7.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:mag_power'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mag_power'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:MagArg__'></a><span class='texttt'><i >MagArg</i></span> <span class='keyword'>auto</span> Base, <span class='keyword'>int</span> Num, <span class='keyword'>int</span> Den <span class='operator'>=</span> <span class='literal'>1</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude__________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> mag_power <span class='operator'>=</span> <span class='texttt'><i >pow</i></span><span class='anglebracket'><</span>Num, Den<span class='anglebracket'>></span><span class='parenthesis'>(</span>mag<span class='anglebracket'><</span>Base<span class='anglebracket'>></span><span class='parenthesis'>)</span>;
|
||
</code></div></div></div><div class='para' id='mag.ops-8'><div class='marginalizedparent'><a class='marginalized' href='#mag.ops-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2486'>#</a></div><div class='texpara'><div id='mag.ops-8.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>Base</span> is greater than <span class='math'>0</span><a class='hidden_link' href='#mag.ops-8.sentence-1'>.</a></div></div></div></div></div><div id='mag.utils' class='section'><h4 ><a class='secnum' href='#mag.utils' style='min-width:110pt'>5.4.4.2.5</a> Utilities <a class='abbr_ref' href='qty.unit.mag.utils.html'>[qty.unit.mag.utils]</a></h4><div class='texpara'><div id='lib:is-positive-integral-power,UnitMagnitude'><div id='lib:UnitMagnitude,is-positive-integral-power'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:UnitMagnitude,is-positive-integral-power'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='texttt'><i >is-positive-integral-power</i></span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span> x<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
</code></div></div></div></div><div class='para' id='mag.utils-1'><div class='marginalizedparent'><a class='marginalized' href='#mag.utils-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2499'>#</a></div><div class='texpara'><div id='mag.utils-1.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='literal'>false</span></span> if <span class='texttt'>x</span> has a negative or rational exponent, and
|
||
<span class='texttt'><span class='literal'>true</span></span> otherwise<a class='hidden_link' href='#mag.utils-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:common-magnitude,UnitMagnitude'><div id='lib:UnitMagnitude,common-magnitude'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:UnitMagnitude,common-magnitude'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Ms2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >common-magnitude</i></span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span>, <span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'><</span>Ms2<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
</code></div></div></div></div><div class='para' id='mag.utils-2'><div class='marginalizedparent'><a class='marginalized' href='#mag.utils-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2512'>#</a></div><div class='texpara'><div id='mag.utils-2.sentence-1' class='sentence'><i >Returns</i>: The largest magnitude <span class='texttt'>C</span>
|
||
such that each input magnitude is expressible
|
||
by only positive powers relative to <span class='texttt'>C</span><a class='hidden_link' href='#mag.utils-2.sentence-1'>.</a></div></div></div></div></div></div><div id='traits' class='section'><h4 ><a class='secnum' href='#traits' style='min-width:95pt'>5.4.4.3</a> Traits <a class='abbr_ref' href='qty.unit.traits.html'>[qty.unit.traits]</a></h4><div class='texpara'><div id='lib:space_before_unit_symbol'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:space_before_unit_symbol'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> space_before_unit_symbol <span class='operator'>=</span> <span class='literal'>true</span>;
|
||
</code></div></div></div><div class='para' id='traits-1'><div class='marginalizedparent'><a class='marginalized' href='#traits-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2528'>#</a></div><div class='texpara'><div id='traits-1.sentence-1' class='sentence'>The formatting functions (<a href='#sym.fmt' title='5.4.4.10 Symbol formatting'>[qty.<span class='shy'></span>unit.<span class='shy'></span>sym.<span class='shy'></span>fmt]</a>) use <span class='texttt'>space_<span class='shy'></span>before_<span class='shy'></span>unit_<span class='shy'></span>symbol</span>
|
||
to determine whether there is a space
|
||
between the numerical value and the unit symbol<a class='hidden_link' href='#traits-1.sentence-1'>.</a></div></div></div></div><div class='para' id='traits-2'><div class='marginalizedparent'><a class='marginalized' href='#traits-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2533'>#</a></div><div class='texpara'><div id='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 External'>[spec.<span class='shy'></span>ext]</a>),
|
||
users may specialize <span class='texttt'>space_<span class='shy'></span>before_<span class='shy'></span>unit_<span class='shy'></span>symbol</span>
|
||
for cv-unqualified program-defined types<a class='hidden_link' href='#traits-2.sentence-1'>.</a></div> <div id='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='#traits-2.sentence-2'>.</a></div></div></div></div></div><div id='concepts' class='section'><h4 ><a class='secnum' href='#concepts' style='min-width:95pt'>5.4.4.4</a> Concepts <a class='abbr_ref' href='qty.unit.concepts.html'>[qty.unit.concepts]</a></h4><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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='concept:Unit'><span id='lib:Unit'><span class='texttt'>Unit</span></span></span></a> <span class='operator'>=</span> <a class='index' id='conceptref:SymbolicConstant_'></a><span class='texttt'><i >SymbolicConstant</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>T, <span class='texttt'><i >unit-interface</i></span><span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:PrefixableUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='concept:PrefixableUnit'><span id='lib:PrefixableUnit'><span class='texttt'>PrefixableUnit</span></span></span></a> <span class='operator'>=</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'><</span>T, named_unit<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='concept:AssociatedUnit'><span id='lib:AssociatedUnit'><span class='texttt'>AssociatedUnit</span></span></span></a> <span class='operator'>=</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span>U<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='texttt'><i >has-associated-quantity</i></span><span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> U, <span class='keyword'>auto</span> QS<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:UnitOf' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='concept:UnitOf'><span id='lib:UnitOf'><span class='texttt'>UnitOf</span></span></span></a> <span class='operator'>=</span> <a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'><</span>U<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='qty.spec.concepts.html#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>QS<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:QuantitySpecConvertibleTo'></a><span class='texttt'><i >QuantitySpecConvertibleTo</i></span><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, QS<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<span class='parenthesis'>(</span>get_kind<span class='parenthesis'>(</span>QS<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> get_kind<span class='parenthesis'>(</span>get_quantity_spec<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
|
||
<span class='operator'>!</span><a class='index' id='conceptref:NestedQuantityKindSpecOf'></a><span class='texttt'><i >NestedQuantityKindSpecOf</i></span><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, QS<span class='anglebracket'>></span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>auto</span> From, <span class='keyword'>auto</span> To<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >UnitConvertibleTo</i></span><a class='index' id='concept:UnitConvertibleTo'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
|
||
<a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>From<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>To<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span>convertible<span class='parenthesis'>(</span>From, To<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> U, <span class='keyword'>auto</span> FromU, <span class='keyword'>auto</span> QS<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >UnitCompatibleWith</i></span><a class='index' id='concept:UnitCompatibleWith'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
|
||
<a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span>U<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>FromU<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='qty.spec.concepts.html#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>QS<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit_'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'><</span>U<span class='anglebracket'>></span> <span class='operator'>|</span><span class='operator'>|</span> <a href='#concept:UnitOf' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:UnitOf'><span class='texttt'>UnitOf</span></span></a><span class='anglebracket'><</span>U, QS<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:UnitConvertibleTo'></a><span class='texttt'><i >UnitConvertibleTo</i></span><span class='anglebracket'><</span>FromU, U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >OffsetUnit</i></span><a class='index' id='concept:OffsetUnit'></a> <span class='operator'>=</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='keyword'>requires</span> <span class='curlybracket'>{</span> T<span class='operator'>::</span><span class='texttt'><i >point-origin</i></span>; <span class='curlybracket'>}</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> From, <span class='keyword'>typename</span> To<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >PotentiallyConvertibleTo</i></span><a class='index' id='concept:PotentiallyConvertibleTo'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
|
||
<a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span>From<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span>To<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<span class='parenthesis'>(</span><span class='parenthesis'>(</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit__'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'><</span>From<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit___'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'><</span>To<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
implicitly_convertible<span class='parenthesis'>(</span>get_quantity_spec<span class='parenthesis'>(</span>From<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, get_quantity_spec<span class='parenthesis'>(</span>To<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
|
||
<span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit____'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'><</span>From<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='operator'>!</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit_____'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'><</span>To<span class='anglebracket'>></span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
|
||
</code></div></div></div><div id='types' class='section'><h4 ><a class='secnum' href='#types' style='min-width:95pt'>5.4.4.5</a> Types <a class='abbr_ref' href='qty.unit.types.html'>[qty.unit.types]</a></h4><div id='qty.canon.unit' class='section'><h4 ><a class='secnum' href='#qty.canon.unit' style='min-width:110pt'>5.4.4.5.1</a> Canonical <a class='abbr_ref' href='qty.canon.unit.html'>[qty.canon.unit]</a></h4><div class='texpara'><span id='lib:canonical-unit'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:canonical-unit'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude___________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> M, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> <i >canonical-unit</i> <span class='curlybracket'>{</span> <span class='comment'>// <i >exposition only</i></span>
|
||
M mag;
|
||
U reference_unit;
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='para' id='qty.canon.unit-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.canon.unit-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2597'>#</a></div><div class='texpara'><div id='qty.canon.unit-1.sentence-1' class='sentence'><span class='texttt'><i >canonical-unit</i></span> represents a unit expressed in terms of base units (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-18">IEC 60050, 112-01-18</a>)<a class='hidden_link' href='#qty.canon.unit-1.sentence-1'>.</a></div> <div id='qty.canon.unit-note-1' class='note'><div class='texpara'>[<i>Note <a href='#qty.canon.unit-note-1'>1</a></i>: <div id='qty.canon.unit-1.sentence-2' class='sentence'>Other types representing units are equal only if they have the same type<a class='hidden_link' href='#qty.canon.unit-1.sentence-2'>.</a></div> <div id='qty.canon.unit-1.sentence-3' class='sentence'><span class='texttt'><i >canonical-unit</i></span> is used to implement binary relations other than equality<a class='hidden_link' href='#qty.canon.unit-1.sentence-3'>.</a></div> — <i>end note</i>]</div></div> <div id='qty.canon.unit-1.sentence-4' class='sentence'><span class='texttt'>reference_<span class='shy'></span>unit</span> is simplified (<a href='qty.sym.expr.algos.html' title='5.3.4.4 Algorithms'>[qty.<span class='shy'></span>sym.<span class='shy'></span>expr.<span class='shy'></span>algos]</a>)<a class='hidden_link' href='#qty.canon.unit-1.sentence-4'>.</a></div></div></div><div class='texpara'><div id='lib:get-canonical-unit,Unit'><div id='lib:Unit,get-canonical-unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:Unit,get-canonical-unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >get-canonical-unit</i></span><span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
</code></div></div></div></div><div class='para' id='qty.canon.unit-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.canon.unit-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2611'>#</a></div><div class='texpara'><div id='qty.canon.unit-2.sentence-1' class='sentence'><i >Returns</i>: The instantiation of <span class='texttt'><i >canonical-unit</i></span> for <span class='texttt'>u</span><a class='hidden_link' href='#qty.canon.unit-2.sentence-1'>.</a></div></div></div></div></div><div id='qty.scaled.unit' class='section'><h4 ><a class='secnum' href='#qty.scaled.unit' style='min-width:110pt'>5.4.4.5.2</a> Scaled <a class='abbr_ref' href='qty.scaled.unit.html'>[qty.scaled.unit]</a></h4><div class='texpara'><span id='lib:scaled_unit'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:scaled_unit'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude____________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> M, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>M <span class='operator'>!</span><span class='operator'>=</span> <i >unit-magnitude</i><span class='anglebracket'><</span><span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>&</span><span class='operator'>&</span> M <span class='operator'>!</span><span class='operator'>=</span> mag<span class='anglebracket'><</span><span class='literal'>1</span><span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>struct</span> scaled_unit <span class='keyword'>final</span> <span class='operator'>:</span> <i >unit-interface</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> scaled_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_____________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> <i >mag</i> <span class='operator'>=</span> M; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> U <i >reference-unit</i><span class='curlybracket'>{</span><span class='curlybracket'>}</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >point-origin</i> <span class='operator'>=</span> U<span class='operator'>::</span>point_origin; <span class='comment'>// <i >exposition only</i>, present only</span>
|
||
<span class='comment'>// if the <span class='textsf'><i >qualified-id</i></span> <span class='tcode_in_codeblock'>U​::​point_<span class='shy'></span>origin</span> is valid and denotes an object</span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='para' id='qty.scaled.unit-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.scaled.unit-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2635'>#</a></div><div class='texpara'><div id='qty.scaled.unit-1.sentence-1' class='sentence'><span class='texttt'>scaled_<span class='shy'></span>unit<span class='anglebracket'><</span>M, U<span class='anglebracket'>></span></span> is used by the library
|
||
to represent the unit <span class='math'><span class='texttt'>M</span> ×<span class='texttt'>U</span></span><a class='hidden_link' href='#qty.scaled.unit-1.sentence-1'>.</a></div></div></div></div><div id='qty.named.unit' class='section'><h4 ><a class='secnum' href='#qty.named.unit' style='min-width:110pt'>5.4.4.5.3</a> Named <a class='abbr_ref' href='qty.named.unit.html'>[qty.named.unit]</a></h4><div class='texpara'><span id='lib:named_unit'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:named_unit'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a class='index' id='conceptref:QuantityKindSpec'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:BaseDimension'></a><i >BaseDimension</i><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>QS<span class='operator'>.</span>dimension<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, QS<span class='anglebracket'>></span> <span class='operator'>:</span> <i >unit-interface</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >quantity-spec</i> <span class='operator'>=</span> QS; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a class='index' id='conceptref:QuantityKindSpec_'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS, <a href='qty.pt.orig.concepts.html#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> PO<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:BaseDimension_'></a><i >BaseDimension</i><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>QS<span class='operator'>.</span>dimension<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, QS, PO<span class='anglebracket'>></span> <span class='operator'>:</span> <i >unit-interface</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >quantity-spec</i> <span class='operator'>=</span> QS; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >point-origin</i> <span class='operator'>=</span> PO; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol<span class='anglebracket'>></span> <span class='operator'>:</span> <i >unit-interface</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, U<span class='anglebracket'>></span> <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> U, <a href='qty.pt.orig.concepts.html#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> PO<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, U, PO<span class='anglebracket'>></span> <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >point-origin</i> <span class='operator'>=</span> PO; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit______'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> U, <a class='index' id='conceptref:QuantityKindSpec__'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span>QS<span class='operator'>.</span>dimension <span class='operator'>=</span><span class='operator'>=</span> <i >get-associated-quantity</i><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>.</span>dimension<span class='parenthesis'>)</span>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, U, QS<span class='anglebracket'>></span> <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >quantity-spec</i> <span class='operator'>=</span> QS; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit_______'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> U, <a class='index' id='conceptref:QuantityKindSpec___'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS,
|
||
<a href='qty.pt.orig.concepts.html#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin__'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> PO<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span>QS<span class='operator'>.</span>dimension <span class='operator'>=</span><span class='operator'>=</span> <i >get-associated-quantity</i><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>.</span>dimension<span class='parenthesis'>)</span>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, U, QS, PO<span class='anglebracket'>></span> <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >quantity-spec</i> <span class='operator'>=</span> QS; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >point-origin</i> <span class='operator'>=</span> PO; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='para' id='qty.named.unit-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.named.unit-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2705'>#</a></div><div class='texpara'><div id='qty.named.unit-1.sentence-1' class='sentence'>A <a class='hidden_link' href='#def:unit,named' title='5.4.4.5.3 Named [qty.named.unit]'><span id='def:unit,named'><i >named unit</i></span></a> is a type that models <a href='#concept:PrefixableUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:PrefixableUnit'><span class='texttt'>PrefixableUnit</span></span></a><a class='hidden_link' href='#qty.named.unit-1.sentence-1'>.</a></div> <div id='qty.named.unit-1.sentence-2' class='sentence'>A specialization of <span class='texttt'>named_<span class='shy'></span>unit</span> is used as a base type when defining a named unit<a class='hidden_link' href='#qty.named.unit-1.sentence-2'>.</a></div></div></div><div class='para' id='qty.named.unit-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.named.unit-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2709'>#</a></div><div class='texpara'><div id='qty.named.unit-2.sentence-1' class='sentence'>In the following descriptions, let <span class='texttt'>U</span> be a named unit defined with an alluded signature<a class='hidden_link' href='#qty.named.unit-2.sentence-1'>.</a></div> <div id='qty.named.unit-2.sentence-2' class='sentence'>The identifier of <span class='texttt'>U</span> represents
|
||
its unit name (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-15">IEC 60050, 112-01-15</a>)
|
||
or special unit name (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-16">IEC 60050, 112-01-16</a>)<a class='hidden_link' href='#qty.named.unit-2.sentence-2'>.</a></div> <div id='qty.named.unit-2.sentence-3' class='sentence'><span class='texttt'>Symbol</span> is its unit symbol (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-17">IEC 60050, 112-01-17</a>)<a class='hidden_link' href='#qty.named.unit-2.sentence-3'>.</a></div></div></div><div class='para' id='qty.named.unit-3'><div class='marginalizedparent'><a class='marginalized' href='#qty.named.unit-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2716'>#</a></div><div class='texpara'><div id='qty.named.unit-3.sentence-1' class='sentence'>The possible arguments to <span class='texttt'>named_<span class='shy'></span>unit</span> are
|
||
<ul class='itemize'><li id='qty.named.unit-3.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.named.unit-3.1'>(3.1)</a></div><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">the unit symbol</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mtext MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.519em;">a kind of base quantity</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">a point origin</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.377em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mstyle" style="font-size: 113.1%; color: black;"><span class="mjx-mrow" style="font-size: 88.4%;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span>,</li><li id='qty.named.unit-3.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.named.unit-3.2'>(3.2)</a></div><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">the unit symbol</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span>,</li><li id='qty.named.unit-3.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.named.unit-3.3'>(3.3)</a></div><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">the unit symbol</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mtext MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">a unit expression</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">a point origin</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.377em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mstyle" style="font-size: 113.1%; color: black;"><span class="mjx-mrow" style="font-size: 88.4%;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span>, and</li><li id='qty.named.unit-3.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.named.unit-3.4'>(3.4)</a></div><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">the unit symbol</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mtext MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">a unit expression</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mtext MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.519em;">a kind of quantity</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">a point origin</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.377em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mstyle" style="font-size: 113.1%; color: black;"><span class="mjx-mrow" style="font-size: 88.4%;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span><a class='hidden_link' href='#qty.named.unit-3.sentence-1'>.</a></li></ul></div></div></div><div class='para' id='qty.named.unit-4'><div class='marginalizedparent'><a class='marginalized' href='#qty.named.unit-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2729'>#</a></div><div class='texpara'><div id='qty.named.unit-4.sentence-1' class='sentence'>The first signature defines the unit of a base quantity
|
||
without a unit prefix (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-26">IEC 60050, 112-01-26</a>)<a class='hidden_link' href='#qty.named.unit-4.sentence-1'>.</a></div> <div id='qty.named.unit-4.sentence-2' class='sentence'>The second signature defines a unit
|
||
that can be reused by several base quantities<a class='hidden_link' href='#qty.named.unit-4.sentence-2'>.</a></div> <div id='qty.named.unit-4.sentence-3' class='sentence'>The third and fourth signatures with a unit expression argument <i >E</i>
|
||
define <span class='texttt'>U</span> as implicitly convertible from <i >E</i><a class='hidden_link' href='#qty.named.unit-4.sentence-3'>.</a></div> <div id='qty.named.unit-4.sentence-4' class='sentence'>The first and fourth signatures with a kind of quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-04">IEC 60050, 112-01-04</a>) <i >Q</i>
|
||
also restrict <span class='texttt'>U</span> to <i >Q</i><a class='hidden_link' href='#qty.named.unit-4.sentence-4'>.</a></div></div></div><div class='para' id='qty.named.unit-5'><div class='marginalizedparent'><a class='marginalized' href='#qty.named.unit-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2739'>#</a></div><div class='texpara'><div id='qty.named.unit-5.sentence-1' class='sentence'>A point origin argument specifies the default point origin of <span class='texttt'>U</span> (<a href='qty.pt.syn.html' title='5.7.4 Class template quantity_­point'>[qty.<span class='shy'></span>pt.<span class='shy'></span>syn]</a>)<a class='hidden_link' href='#qty.named.unit-5.sentence-1'>.</a></div></div></div><div class='para nonNormativeOnly' id='qty.named.unit-6'><div class='marginalizedparent'><a class='marginalized' href='#qty.named.unit-6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2742'>#</a></div><div class='texpara'><div id='qty.named.unit-example-1' class='example'><div class='texpara'>[<i>Example <a href='#qty.named.unit-example-1'>1</a></i>: <span class='codeblock'><span class='comment'>// The first signature defines a base unit restricted to a kind of base quantity.</span>
|
||
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> second <span class='keyword'>final</span> <span class='operator'>:</span> named_unit<span class='anglebracket'><</span><span class='literal'>"s"</span>, kind_of<span class='anglebracket'><</span>time<span class='anglebracket'>></span><span class='anglebracket'>></span> <span class='curlybracket'>{</span>
|
||
<span class='curlybracket'>}</span> second;
|
||
|
||
<span class='comment'>// The third and fourth signatures give a name to the unit argument.</span>
|
||
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> minute <span class='keyword'>final</span> <span class='operator'>:</span> named_unit<span class='anglebracket'><</span><span class='literal'>"min"</span>, mag<span class='anglebracket'><</span><span class='literal'>60</span><span class='anglebracket'>></span> <span class='operator'>*</span> second<span class='anglebracket'>></span> <span class='curlybracket'>{</span>
|
||
<span class='curlybracket'>}</span> minute; <span class='comment'>// <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">min</span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">60</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.372em;"> s</span></span></span></span></span></span></span>.</span>
|
||
|
||
<span class='comment'>// The fourth signature also further restricts the kind of quantity.</span>
|
||
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> hertz <span class='keyword'>final</span> <span class='operator'>:</span> named_unit<span class='anglebracket'><</span><span class='literal'>"Hz"</span>, inverse<span class='parenthesis'>(</span>second<span class='parenthesis'>)</span>, kind_of<span class='anglebracket'><</span>frequency<span class='anglebracket'>></span><span class='anglebracket'>></span> <span class='curlybracket'>{</span>
|
||
<span class='curlybracket'>}</span> hertz; <span class='comment'>// <span class='math'><span class='textrm'>Hz</span></span> can't measure becquerel, activity,</span>
|
||
<span class='comment'>// or any other quantity with dimension <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">T</span></span></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.607em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span></span></span></span></span>
|
||
<span class='comment'>// that isn't a kind of frequency.</span>
|
||
</span> — <i>end example</i>]</div></div></div></div></div><div id='qty.prefixed.unit' class='section'><h4 ><a class='secnum' href='#qty.prefixed.unit' style='min-width:110pt'>5.4.4.5.4</a> Prefixed <a class='abbr_ref' href='qty.prefixed.unit.html'>[qty.prefixed.unit]</a></h4><div class='texpara'><span id='lib:prefixed_unit'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:prefixed_unit'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude______________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> M, <a href='#concept:PrefixableUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:PrefixableUnit_'><span class='tcode_in_codeblock'>PrefixableUnit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>struct</span> prefixed_unit <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span>M <span class='operator'>*</span> U<span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> prefixed_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol <span class='operator'>+</span> U<span class='operator'>.</span><i >symbol</i>; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='para' id='qty.prefixed.unit-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.prefixed.unit-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2777'>#</a></div><div class='texpara'><div id='qty.prefixed.unit-1.sentence-1' class='sentence'><span class='texttt'>prefixed_<span class='shy'></span>unit<span class='anglebracket'><</span>Symbol, M, U<span class='anglebracket'>></span></span> represents the unit <span class='texttt'>U</span> with a unit prefix (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-26">IEC 60050, 112-01-26</a>)<a class='hidden_link' href='#qty.prefixed.unit-1.sentence-1'>.</a></div> <div id='qty.prefixed.unit-1.sentence-2' class='sentence'><span class='texttt'>Symbol</span> is the symbol of the unit prefix<a class='hidden_link' href='#qty.prefixed.unit-1.sentence-2'>.</a></div> <div id='qty.prefixed.unit-1.sentence-3' class='sentence'><span class='texttt'>M</span> is the factor of the unit prefix<a class='hidden_link' href='#qty.prefixed.unit-1.sentence-3'>.</a></div> <div id='qty.prefixed.unit-1.sentence-4' class='sentence'>A specialization of <span class='texttt'>prefixed_<span class='shy'></span>unit</span> is used as a base type when defining a unit prefix<a class='hidden_link' href='#qty.prefixed.unit-1.sentence-4'>.</a></div> <div id='qty.prefixed.unit-example-1' class='example'><div class='texpara'>[<i>Example <a href='#qty.prefixed.unit-example-1'>1</a></i>: <span class='codeblock'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:PrefixableUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:PrefixableUnit__'><span class='tcode_in_codeblock'>PrefixableUnit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> kilo_ <span class='operator'>:</span> prefixed_unit<span class='anglebracket'><</span><span class='literal'>"k"</span>, mag_power<span class='anglebracket'><</span><span class='literal'>10</span>, <span class='literal'>3</span><span class='anglebracket'>></span>, U<span class='anglebracket'>></span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:PrefixableUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:PrefixableUnit___'><span class='tcode_in_codeblock'>PrefixableUnit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> kilo_<span class='anglebracket'><</span>U<span class='anglebracket'>></span> kilo;
|
||
|
||
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> kilogram <span class='operator'>=</span> kilo<span class='anglebracket'><</span>si<span class='operator'>::</span>gram<span class='anglebracket'>></span>;
|
||
</span> — <i>end example</i>]</div></div></div></div></div><div id='qty.common.unit' class='section'><h4 ><a class='secnum' href='#qty.common.unit' style='min-width:110pt'>5.4.4.5.5</a> Common <a class='abbr_ref' href='qty.common.unit.html'>[qty.common.unit]</a></h4><div class='texpara'><span id='lib:common_unit'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:common_unit'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________'><span class='tcode_in_codeblock'>Unit</span></span></a> U1, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U2, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________'><span class='tcode_in_codeblock'>Unit</span></span></a><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Rest<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> common_unit <span class='keyword'>final</span> <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><i >get-common-scaled-unit</i><span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rest<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i>
|
||
<span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> common_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >common-unit</i> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
|
||
<i >get-common-scaled-unit</i><span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rest<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='para' id='qty.common.unit-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.common.unit-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2811'>#</a></div><div class='texpara'><div id='qty.common.unit-1.sentence-1' class='sentence'><span class='texttt'>common_<span class='shy'></span>unit</span> is used by the library
|
||
to encapsulate a conversion factor between units (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-33">IEC 60050, 112-01-33</a>)
|
||
common to the operands of quantity addition<a class='hidden_link' href='#qty.common.unit-1.sentence-1'>.</a></div> <div id='qty.common.unit-example-1' class='example'><div class='texpara'>[<i>Example <a href='#qty.common.unit-example-1'>1</a></i>: <div id='qty.common.unit-1.sentence-2' class='sentence'>The result of <span class='texttt'><span class='literal'>1</span> <span class='operator'>*</span> km <span class='operator'>+</span> <span class='literal'>1</span> <span class='operator'>*</span> mi</span>
|
||
has a common unit <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">[</span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">8</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">/</span></span></span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">125</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">]</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.372em;"> m</span></span></span></span></span></span></span>
|
||
encapsulated by <span class='texttt'>common_<span class='shy'></span>unit<span class='anglebracket'><</span>mi, km<span class='anglebracket'>></span></span><a class='hidden_link' href='#qty.common.unit-1.sentence-2'>.</a></div> — <i>end example</i>]</div></div> <div id='qty.common.unit-1.sentence-3' class='sentence'>
|
||
A program that instantiates a specialization of <span class='texttt'>common_<span class='shy'></span>unit</span>
|
||
that is not a possible result of the library specifications
|
||
is ill-formed, no diagnostic required<a class='hidden_link' href='#qty.common.unit-1.sentence-3'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='qty.common.unit-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#qty.common.unit-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________'><span class='texttt'>Unit</span></span></a> U1, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________'><span class='texttt'>Unit</span></span></a> U2, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________'><span class='texttt'>Unit</span></span></a><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Rest<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='texttt'><i >get-common-scaled-unit</i></span><span class='parenthesis'>(</span>U1, U2, Rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> rest<span class='parenthesis'>)</span> <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
|
||
</code></div></div><div class='para' id='qty.common.unit-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.common.unit-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2831'>#</a></div><div class='texpara'><div id='qty.common.unit-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
|
||
<span class='codeblock'><span class='keyword'>constexpr</span> <span class='keyword'>auto</span> res <span class='operator'>=</span> <span class='squarebracket'>[</span><span class='squarebracket'>]</span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> canonical_lhs <span class='operator'>=</span> <i >get-canonical-unit</i><span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
|
||
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> canonical_rhs <span class='operator'>=</span> <i >get-canonical-unit</i><span class='parenthesis'>(</span>U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
|
||
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> common_mag <span class='operator'>=</span> <i >common-magnitude</i><span class='parenthesis'>(</span>canonical_lhs<span class='operator'>.</span>mag, canonical_rhs<span class='operator'>.</span>mag<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>common_mag <span class='operator'>=</span><span class='operator'>=</span> mag<span class='anglebracket'><</span><span class='literal'>1</span><span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> canonical_lhs<span class='operator'>.</span>reference_unit;
|
||
<span class='keyword'>else</span>
|
||
<span class='keyword'>return</span> scaled_unit<span class='anglebracket'><</span>common_mag, <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>canonical_lhs<span class='operator'>.</span>reference_unit<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
<span class='curlybracket'>}</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
|
||
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>rest<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>0</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> res;
|
||
<span class='keyword'>else</span>
|
||
<span class='keyword'>return</span> <i >get-common-scaled-unit</i><span class='parenthesis'>(</span>res, rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
|
||
</span></div></div></div></div><div class='para' id='qty.common.unit-3'><div class='marginalizedparent'><a class='marginalized' href='#qty.common.unit-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2850'>#</a></div><div class='texpara'><div id='qty.common.unit-3.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
|
||
<span class='codeblock'><span class='parenthesis'>(</span>convertible<span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>Rest<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>0</span> <span class='operator'>|</span><span class='operator'>|</span> <span class='keyword'>requires</span> <span class='curlybracket'>{</span>
|
||
<i >get-common-scaled-unit</i><span class='parenthesis'>(</span><i >get-common-scaled-unit</i><span class='parenthesis'>(</span>u1, u2<span class='parenthesis'>)</span>, rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
|
||
<span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
</span></div></div></div></div></div><div id='qty.derived.unit' class='section'><h4 ><a class='secnum' href='#qty.derived.unit' style='min-width:110pt'>5.4.4.5.6</a> Derived <a class='abbr_ref' href='qty.derived.unit.html'>[qty.derived.unit]</a></h4><div class='texpara'><span id='lib:derived_unit'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:derived_unit'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> <i >derived-unit-impl</i> <span class='operator'>:</span> <span class='comment'>// <i >exposition only</i></span>
|
||
<i >unit-interface</i>,
|
||
<i >expr-fractions</i><span class='anglebracket'><</span><span class='keyword'>struct</span> one, Expr<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> <i >derived-unit-impl</i>; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:SymbolicConstant__'></a><i >SymbolicConstant</i><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> derived_unit <span class='keyword'>final</span> <span class='operator'>:</span> <i >derived-unit-impl</i><span class='anglebracket'><</span>Expr<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='para' id='qty.derived.unit-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.derived.unit-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2879'>#</a></div><div class='texpara'><div id='qty.derived.unit-1.sentence-1' class='sentence'><span class='texttt'>derived_<span class='shy'></span>unit</span> is used by the library
|
||
to represent a derived unit (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-19">IEC 60050, 112-01-19</a>)<a class='hidden_link' href='#qty.derived.unit-1.sentence-1'>.</a></div> <div id='qty.derived.unit-example-1' class='example'><div class='texpara'>[<i>Example <a href='#qty.derived.unit-example-1'>1</a></i>: <span class='codeblock'><span class='keyword'>using</span> <span class='keyword'>namespace</span> si<span class='operator'>::</span>unit_symbols;
|
||
<span class='keyword'>int</span> x <span class='operator'>=</span> m <span class='operator'>*</span> m; <span class='comment'>// error: cannot construct from <span class='tcode_in_codeblock'>derived_<span class='shy'></span>unit<power<si​::​metre, 2>></span></span>
|
||
<span class='keyword'>int</span> y <span class='operator'>=</span> m <span class='operator'>*</span> s; <span class='comment'>// error: cannot construct from <span class='tcode_in_codeblock'>derived_<span class='shy'></span>unit<si​::​metre, si​::​second></span></span>
|
||
<span class='keyword'>int</span> z <span class='operator'>=</span> m <span class='operator'>/</span> s; <span class='comment'>// error: cannot construct from <span class='tcode_in_codeblock'>derived_<span class='shy'></span>unit<si​::​metre, per<si​::​second>></span></span>
|
||
</span> — <i>end example</i>]</div></div> <div id='qty.derived.unit-1.sentence-2' class='sentence'>
|
||
A program that instantiates a specialization of <span class='texttt'>derived_<span class='shy'></span>unit</span>
|
||
that is not a possible result of the library specifications
|
||
is ill-formed, no diagnostic required<a class='hidden_link' href='#qty.derived.unit-1.sentence-2'>.</a></div></div></div></div><div id='one' class='section'><h4 ><a class='secnum' href='#one' style='min-width:110pt'>5.4.4.5.7</a> One <a class='abbr_ref' href='qty.unit.one.html'>[qty.unit.one]</a></h4><div class='texpara'><span id='lib:one'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:one'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
|
||
|
||
<span class='keyword'>struct</span> one <span class='keyword'>final</span> <span class='operator'>:</span> <i >derived-unit-impl</i><span class='anglebracket'><</span><span class='anglebracket'>></span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='para' id='one-1'><div class='marginalizedparent'><a class='marginalized' href='#one-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2905'>#</a></div><div class='texpara'><div id='one-1.sentence-1' class='sentence'><span class='texttt'>one</span> represents the base unit (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-18">IEC 60050, 112-01-18</a>) of a quantity of dimension one (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-13">IEC 60050, 112-01-13</a>)<a class='hidden_link' href='#one-1.sentence-1'>.</a></div></div></div></div></div><div id='ops' class='section'><h4 ><a class='secnum' href='#ops' style='min-width:95pt'>5.4.4.6</a> Operations <a class='abbr_ref' href='qty.unit.ops.html'>[qty.unit.ops]</a></h4><div class='texpara'><span id='lib:unit-interface'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unit-interface'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
|
||
|
||
<span class='keyword'>struct</span> <i >unit-interface</i> <span class='curlybracket'>{</span> <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_______________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> M, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>M, U u<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span>, <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude________________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_________________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> M, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>M mag, U u<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='comment'>// <a href='#cmp' title='5.4.4.7 Comparison'>[qty.<span class='shy'></span>unit.<span class='shy'></span>cmp]</a>, comparison</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> equivalent<span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='texpara'><div id='lib:Unit,operator*'><div id='lib:operator*,Unit'><div id='lib:UnitMagnitude,operator*_'><div id='lib:operator*,UnitMagnitude_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,UnitMagnitude_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude__________________'><span class='texttt'>UnitMagnitude</span></span></a> M, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>M, U u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div></div></div><div class='para' id='ops-1'><div class='marginalizedparent'><a class='marginalized' href='#ops-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2949'>#</a></div><div class='texpara'><div id='ops-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
|
||
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>std<span class='operator'>::</span>is_same_v<span class='anglebracket'><</span>M, <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>mag<span class='anglebracket'><</span><span class='literal'>1</span><span class='anglebracket'>></span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> u;
|
||
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-specialization-of</i><span class='anglebracket'><</span>U, scaled_unit<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>M<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> U<span class='operator'>::</span><i >mag</i> <span class='operator'>=</span><span class='operator'>=</span> mag<span class='anglebracket'><</span><span class='literal'>1</span><span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> U<span class='operator'>::</span><i >reference-unit</i>;
|
||
<span class='keyword'>else</span>
|
||
<span class='keyword'>return</span> scaled_unit<span class='anglebracket'><</span>M<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> U<span class='operator'>::</span><i >mag</i>, <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>U<span class='operator'>::</span><i >reference-unit</i><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
<span class='curlybracket'>}</span> <span class='keyword'>else</span>
|
||
<span class='keyword'>return</span> scaled_unit<span class='anglebracket'><</span>M<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
</span></div></div></div></div><div class='texpara'><div class='itemdecl' id='ops-itemdecl:2'><div class='marginalizedparent'><a class='itemDeclLink' href='#ops-itemdecl:2'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span>, <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude___________________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
|
||
</code></div></div><div class='para' id='ops-2'><div class='marginalizedparent'><a class='marginalized' href='#ops-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2970'>#</a></div><div class='texpara'><div id='ops-2.sentence-1' class='sentence'><i >Recommended practice</i>: Suggest swapping the operands<a class='hidden_link' href='#ops-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,operator/'><div id='lib:operator/,Unit'><div id='lib:UnitMagnitude,operator/_'><div id='lib:operator/,UnitMagnitude_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator/,UnitMagnitude_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude____________________'><span class='texttt'>UnitMagnitude</span></span></a> M, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>M mag, U u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div></div></div><div class='para' id='ops-3'><div class='marginalizedparent'><a class='marginalized' href='#ops-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2983'>#</a></div><div class='texpara'><div id='ops-3.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>mag <span class='operator'>*</span> inverse<span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#ops-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,operator*_'><div id='lib:operator*,Unit_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,Unit_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________________________'><span class='texttt'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________'><span class='texttt'>Unit</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='ops-4'><div class='marginalizedparent'><a class='marginalized' href='#ops-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L2995'>#</a></div><div class='texpara'><div id='ops-4.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='texttt'><i >expr-multiply</i></span><span class='anglebracket'><</span>derived_<span class='shy'></span>unit, <span class='keyword'>struct</span> one<span class='anglebracket'>></span><span class='parenthesis'>(</span>lhs, rhs<span class='parenthesis'>)</span></span><a class='hidden_link' href='#ops-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,operator/_'><div id='lib:operator/,Unit_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator/,Unit_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________'><span class='texttt'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________________________'><span class='texttt'>Unit</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='ops-5'><div class='marginalizedparent'><a class='marginalized' href='#ops-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3007'>#</a></div><div class='texpara'><div id='ops-5.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='texttt'><i >expr-divide</i></span><span class='anglebracket'><</span>derived_<span class='shy'></span>unit, <span class='keyword'>struct</span> one<span class='anglebracket'>></span><span class='parenthesis'>(</span>lhs, rhs<span class='parenthesis'>)</span></span><a class='hidden_link' href='#ops-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,inverse'><div id='lib:inverse,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:inverse,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> inverse<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='ops-6'><div class='marginalizedparent'><a class='marginalized' href='#ops-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3018'>#</a></div><div class='texpara'><div id='ops-6.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>one <span class='operator'>/</span> u</span><a class='hidden_link' href='#ops-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,pow'><div id='lib:pow,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:pow,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>intmax_t Num, std<span class='operator'>::</span>intmax_t Den <span class='operator'>=</span> <span class='literal'>1</span>, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Den <span class='operator'>!</span><span class='operator'>=</span> <span class='literal'>0</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> pow<span class='parenthesis'>(</span>U u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='ops-7'><div class='marginalizedparent'><a class='marginalized' href='#ops-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3031'>#</a></div><div class='texpara'><div id='ops-7.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='texttt'><i >expr-pow</i></span><span class='anglebracket'><</span>Num, Den, derived_<span class='shy'></span>unit, <span class='keyword'>struct</span> one<span class='anglebracket'>></span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#ops-7.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,sqrt'><div id='lib:sqrt,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:sqrt,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> sqrt<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='ops-8'><div class='marginalizedparent'><a class='marginalized' href='#ops-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3042'>#</a></div><div class='texpara'><div id='ops-8.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>pow<span class='anglebracket'><</span><span class='literal'>1</span>, <span class='literal'>2</span><span class='anglebracket'>></span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#ops-8.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,cbrt'><div id='lib:cbrt,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:cbrt,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> cbrt<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='ops-9'><div class='marginalizedparent'><a class='marginalized' href='#ops-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3053'>#</a></div><div class='texpara'><div id='ops-9.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>pow<span class='anglebracket'><</span><span class='literal'>1</span>, <span class='literal'>3</span><span class='anglebracket'>></span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#ops-9.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,square'><div id='lib:square,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:square,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> square<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='ops-10'><div class='marginalizedparent'><a class='marginalized' href='#ops-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3064'>#</a></div><div class='texpara'><div id='ops-10.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>pow<span class='anglebracket'><</span><span class='literal'>2</span><span class='anglebracket'>></span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#ops-10.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,cubic'><div id='lib:cubic,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:cubic,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> cubic<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='ops-11'><div class='marginalizedparent'><a class='marginalized' href='#ops-11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3075'>#</a></div><div class='texpara'><div id='ops-11.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>pow<span class='anglebracket'><</span><span class='literal'>3</span><span class='anglebracket'>></span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#ops-11.sentence-1'>.</a></div></div></div></div></div><div id='cmp' class='section'><h4 ><a class='secnum' href='#cmp' style='min-width:95pt'>5.4.4.7</a> Comparison <a class='abbr_ref' href='qty.unit.cmp.html'>[qty.unit.cmp]</a></h4><div class='texpara'><div id='lib:Unit,operator=='><div id='lib:operator==,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator==,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________'><span class='texttt'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________'><span class='texttt'>Unit</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='cmp-1'><div class='marginalizedparent'><a class='marginalized' href='#cmp-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3089'>#</a></div><div class='texpara'><div id='cmp-1.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>std<span class='operator'>​::​</span>is_<span class='shy'></span>same_<span class='shy'></span>v<span class='anglebracket'><</span>Lhs, Rhs<span class='anglebracket'>></span></span><a class='hidden_link' href='#cmp-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,equivalent'><div id='lib:equivalent,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:equivalent,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________'><span class='texttt'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________'><span class='texttt'>Unit</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> equivalent<span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='cmp-2'><div class='marginalizedparent'><a class='marginalized' href='#cmp-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3101'>#</a></div><div class='texpara'><div id='cmp-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
|
||
<span class='codeblock'><span class='keyword'>const</span> <span class='keyword'>auto</span> lhs_canonical <span class='operator'>=</span> <i >get-canonical-unit</i><span class='parenthesis'>(</span>lhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>const</span> <span class='keyword'>auto</span> rhs_canonical <span class='operator'>=</span> <i >get-canonical-unit</i><span class='parenthesis'>(</span>rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>return</span> lhs_canonical<span class='operator'>.</span>mag <span class='operator'>=</span><span class='operator'>=</span> rhs_canonical<span class='operator'>.</span>mag <span class='operator'>&</span><span class='operator'>&</span>
|
||
lhs_canonical<span class='operator'>.</span>reference_unit <span class='operator'>=</span><span class='operator'>=</span> rhs_canonical<span class='operator'>.</span>reference_unit;
|
||
</span></div></div></div></div><div class='texpara'><div id='lib:Unit,convertible'><div id='lib:convertible,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:convertible,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________________'><span class='texttt'>Unit</span></span></a> From, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________________'><span class='texttt'>Unit</span></span></a> To<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> convertible<span class='parenthesis'>(</span>From from, To to<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='cmp-3'><div class='marginalizedparent'><a class='marginalized' href='#cmp-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3119'>#</a></div><div class='texpara'><div id='cmp-3.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
|
||
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>std<span class='operator'>::</span>is_same_v<span class='anglebracket'><</span>From, To<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> <span class='literal'>true</span>;
|
||
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><a class='index' id='conceptref:PotentiallyConvertibleTo'></a><i >PotentiallyConvertibleTo</i><span class='anglebracket'><</span>From, To<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> std<span class='operator'>::</span>is_same_v<span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><i >get-canonical-unit</i><span class='parenthesis'>(</span>from<span class='parenthesis'>)</span><span class='operator'>.</span>reference_unit<span class='parenthesis'>)</span>,
|
||
<span class='keyword'>decltype</span><span class='parenthesis'>(</span><i >get-canonical-unit</i><span class='parenthesis'>(</span>to<span class='parenthesis'>)</span><span class='operator'>.</span>reference_unit<span class='parenthesis'>)</span><span class='anglebracket'>></span>;
|
||
<span class='keyword'>else</span>
|
||
<span class='keyword'>return</span> <span class='literal'>false</span>;
|
||
</span></div></div></div></div></div><div id='obs' class='section'><h4 ><a class='secnum' href='#obs' style='min-width:95pt'>5.4.4.8</a> Observers <a class='abbr_ref' href='qty.unit.obs.html'>[qty.unit.obs]</a></h4><div class='texpara'><div id='lib:AssociatedUnit,get_quantity_spec'><div id='lib:get_quantity_spec,AssociatedUnit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:get_quantity_spec,AssociatedUnit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='qty.spec.concepts.html#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec__'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> get_quantity_spec<span class='parenthesis'>(</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit________'><span class='texttt'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='obs-1'><div class='marginalizedparent'><a class='marginalized' href='#obs-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3141'>#</a></div><div class='texpara'><div id='obs-1.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>kind_<span class='shy'></span>of<span class='anglebracket'><</span><span class='texttt'><i >get-associated-quantity</i></span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span><span class='anglebracket'>></span></span><a class='hidden_link' href='#obs-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:AssociatedUnit,get_unit'><div id='lib:get_unit,AssociatedUnit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:get_unit,AssociatedUnit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> get_unit<span class='parenthesis'>(</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit_________'><span class='texttt'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='obs-2'><div class='marginalizedparent'><a class='marginalized' href='#obs-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3152'>#</a></div><div class='texpara'><div id='obs-2.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>u</span><a class='hidden_link' href='#obs-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,get_common_unit'><div id='lib:get_common_unit,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:get_common_unit,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> get_common_unit<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> us<span class='parenthesis'>)</span>
|
||
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
|
||
</code></div></div></div></div><div class='para' id='obs-3'><div class='marginalizedparent'><a class='marginalized' href='#obs-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3164'>#</a></div><div class='texpara'><div id='obs-3.sentence-1' class='sentence'>Let
|
||
<ul class='itemize'><li id='obs-3.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#obs-3.1'>(3.1)</a></div><span class='texttt'>u1</span> be <span class='texttt'>us<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='squarebracket'>[</span><span class='literal'>0</span><span class='squarebracket'>]</span></span>,</li><li id='obs-3.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#obs-3.2'>(3.2)</a></div><span class='texttt'>u2</span> be <span class='texttt'>us<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='squarebracket'>[</span><span class='literal'>1</span><span class='squarebracket'>]</span></span>,</li><li id='obs-3.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#obs-3.3'>(3.3)</a></div><span class='texttt'>U1</span> be <span class='texttt'><span class='keyword'>decltype</span><span class='parenthesis'>(</span>u1<span class='parenthesis'>)</span></span>,</li><li id='obs-3.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#obs-3.4'>(3.4)</a></div><span class='texttt'>U2</span> be <span class='texttt'><span class='keyword'>decltype</span><span class='parenthesis'>(</span>u2<span class='parenthesis'>)</span></span>, and</li><li id='obs-3.5'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#obs-3.5'>(3.5)</a></div><span class='texttt'>rest</span> be a pack denoting the elements of <span class='texttt'>us</span> without <span class='texttt'>u1</span> and <span class='texttt'>u2</span><a class='hidden_link' href='#obs-3.sentence-1'>.</a></li></ul></div></div></div></div><div class='para' id='obs-4'><div class='marginalizedparent'><a class='marginalized' href='#obs-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3179'>#</a></div><div class='texpara'><div id='obs-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
|
||
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>us<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>1</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> u1;
|
||
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>us<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>2</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'><</span>U1, common_unit<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>return</span> <i >TBD.</i>;
|
||
<span class='curlybracket'>}</span> <span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'><</span>U2, common_unit<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> get_common_unit<span class='parenthesis'>(</span>u2, u1<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>std<span class='operator'>::</span>is_same_v<span class='anglebracket'><</span>U1, U2<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> u1;
|
||
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>equivalent<span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>U1, <span class='keyword'>typename</span> U2<span class='operator'>::</span><i >base-type</i><span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> u1;
|
||
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>U2, <span class='keyword'>typename</span> U1<span class='operator'>::</span><i >base-type</i><span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> u2;
|
||
<span class='keyword'>else</span>
|
||
<span class='keyword'>return</span> std<span class='operator'>::</span>conditional_t<span class='anglebracket'><</span><i >type-less-impl</i><span class='anglebracket'><</span>U1, U2<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>, U1, U2<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
<span class='curlybracket'>}</span> <span class='keyword'>else</span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> canonical_lhs <span class='operator'>=</span> <i >get-canonical-unit</i><span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
|
||
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> canonical_rhs <span class='operator'>=</span> <i >get-canonical-unit</i><span class='parenthesis'>(</span>U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-positive-integral-power</i><span class='parenthesis'>(</span>canonical_lhs<span class='operator'>.</span>mag <span class='operator'>/</span> canonical_rhs<span class='operator'>.</span>mag<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> u2;
|
||
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-positive-integral-power</i><span class='parenthesis'>(</span>canonical_rhs<span class='operator'>.</span>mag <span class='operator'>/</span> canonical_lhs<span class='operator'>.</span>mag<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> u1;
|
||
<span class='keyword'>else</span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >type-less</i><span class='anglebracket'><</span>U1, U2<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> common_unit<span class='anglebracket'><</span>U1, U2<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
<span class='keyword'>else</span>
|
||
<span class='keyword'>return</span> common_unit<span class='anglebracket'><</span>U2, U1<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
<span class='curlybracket'>}</span>
|
||
<span class='curlybracket'>}</span>
|
||
<span class='curlybracket'>}</span> <span class='keyword'>else</span>
|
||
<span class='keyword'>return</span> get_common_unit<span class='parenthesis'>(</span>get_common_unit<span class='parenthesis'>(</span>u1, u2<span class='parenthesis'>)</span>, rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
|
||
</span></div></div></div></div><div class='para' id='obs-5'><div class='marginalizedparent'><a class='marginalized' href='#obs-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3218'>#</a></div><div class='texpara'><div id='obs-5.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
|
||
<span class='codeblock'><span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>us<span class='parenthesis'>)</span> <span class='operator'>!</span><span class='operator'>=</span> <span class='literal'>0</span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>us<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>1</span> <span class='operator'>|</span><span class='operator'>|</span> <span class='comment'>//</span>
|
||
<span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>us<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>2</span> <span class='operator'>&</span><span class='operator'>&</span> convertible<span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
|
||
<span class='keyword'>requires</span> <span class='curlybracket'>{</span> get_common_unit<span class='parenthesis'>(</span>get_common_unit<span class='parenthesis'>(</span>u1, u2<span class='parenthesis'>)</span>, rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
</span></div></div></div></div></div><div id='assoc.qty' class='section'><h4 ><a class='secnum' href='#assoc.qty' style='min-width:95pt'>5.4.4.9</a> Associated quantity <a class='abbr_ref' href='assoc.qty.html'>[assoc.qty]</a></h4><div class='texpara'><div id='lib:has-associated-quantity,Unit'><div id='lib:Unit,has-associated-quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:Unit,has-associated-quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='texttt'><i >has-associated-quantity</i></span><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
</code></div></div></div></div><div class='para' id='assoc.qty-1'><div class='marginalizedparent'><a class='marginalized' href='#assoc.qty-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3237'>#</a></div><div class='texpara'><div id='assoc.qty-1.sentence-1' class='sentence'><i >Returns</i>: <ul class='itemize'><li id='assoc.qty-1.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-1.1'>(1.1)</a></div><div class='texpara'><div id='assoc.qty-1.1.sentence-1' class='sentence'>If <span class='texttt'>U<span class='operator'>​::​</span><span class='texttt'><i >quantity-spec</i></span></span> is a valid expression,
|
||
returns <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#assoc.qty-1.1.sentence-1'>.</a></div></div></li><li id='assoc.qty-1.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-1.2'>(1.2)</a></div><div class='texpara'><div id='assoc.qty-1.2.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>U<span class='operator'>​::​</span><span class='texttt'><i >reference-unit</i></span></span> is a valid expression,
|
||
returns
|
||
<span class='codeblock'><i >has-associated-quantity</i><span class='parenthesis'>(</span>U<span class='operator'>::</span><i >reference-unit</i><span class='parenthesis'>)</span>
|
||
</span></div></div></li><li id='assoc.qty-1.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-1.3'>(1.3)</a></div><div class='texpara'><div id='assoc.qty-1.3.sentence-1' class='sentence'>Otherwise, if
|
||
<span class='texttt'><span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'><</span>U, <span class='texttt'><i >expr-fractions</i></span><span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
|
||
is <span class='texttt'><span class='literal'>true</span></span>,
|
||
let <span class='texttt'>Nums</span> and <span class='texttt'>Dens</span>
|
||
be packs denoting the template arguments of
|
||
<span class='texttt'>U<span class='operator'>​::​</span><span class='texttt'><i >nums</i></span></span> and <span class='texttt'>U<span class='operator'>​::​</span><span class='texttt'><i >dens</i></span></span>, respectively<a class='hidden_link' href='#assoc.qty-1.3.sentence-1'>.</a></div> <div id='assoc.qty-1.3.sentence-2' class='sentence'>Returns
|
||
<span class='codeblock'><span class='parenthesis'>(</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> <span class='operator'>&</span><span class='operator'>&</span> <i >has-associated-quantity</i><span class='parenthesis'>(</span><i >expr-type</i><span class='anglebracket'><</span>Nums<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<span class='parenthesis'>(</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> <span class='operator'>&</span><span class='operator'>&</span> <i >has-associated-quantity</i><span class='parenthesis'>(</span><i >expr-type</i><span class='anglebracket'><</span>Dens<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
</span></div></div></li><li id='assoc.qty-1.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-1.4'>(1.4)</a></div><div class='texpara'><div id='assoc.qty-1.4.sentence-1' class='sentence'>Otherwise, returns <span class='texttt'><span class='literal'>false</span></span><a class='hidden_link' href='#assoc.qty-1.4.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='texpara'><div id='lib:get-associated-quantity,AssociatedUnit'><div id='lib:AssociatedUnit,get-associated-quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:AssociatedUnit,get-associated-quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit__________'><span class='texttt'>AssociatedUnit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >get-associated-quantity</i></span><span class='parenthesis'>(</span>U u<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
</code></div></div></div></div><div class='para' id='assoc.qty-2'><div class='marginalizedparent'><a class='marginalized' href='#assoc.qty-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3273'>#</a></div><div class='texpara'><div id='assoc.qty-2.sentence-1' class='sentence'><i >Returns</i>: <ul class='itemize'><li id='assoc.qty-2.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-2.1'>(2.1)</a></div>If <span class='texttt'>U</span> is of the form <span class='texttt'>common_<span class='shy'></span>unit<span class='anglebracket'><</span>Us<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span></span>,
|
||
returns
|
||
<span class='codeblock'>get_common_quantity_spec<span class='parenthesis'>(</span><i >get-associated-quantity</i><span class='parenthesis'>(</span>Us<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>
|
||
</span></li><li id='assoc.qty-2.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-2.2'>(2.2)</a></div>Otherwise, if <span class='texttt'>U<span class='operator'>​::​</span><span class='texttt'><i >quantity-spec</i></span></span> is a valid expression,
|
||
returns
|
||
<span class='codeblock'><i >remove-kind</i><span class='parenthesis'>(</span>U<span class='operator'>::</span><i >quantity-spec</i><span class='parenthesis'>)</span>
|
||
</span></li><li id='assoc.qty-2.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-2.3'>(2.3)</a></div>Otherwise, if <span class='texttt'>U<span class='operator'>​::​</span><span class='texttt'><i >reference-unit</i></span></span> is a valid expression,
|
||
returns
|
||
<span class='codeblock'><i >get-associated-quantity</i><span class='parenthesis'>(</span>U<span class='operator'>::</span><i >reference-unit</i><span class='parenthesis'>)</span>
|
||
</span></li><li id='assoc.qty-2.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-2.4'>(2.4)</a></div>Otherwise, if
|
||
<span class='texttt'><span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'><</span>U, <span class='texttt'><i >expr-fractions</i></span><span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
|
||
is <span class='texttt'><span class='literal'>true</span></span>,
|
||
returns
|
||
<span class='codeblock'><i >expr-map</i><span class='anglebracket'><</span><i >to-quantity-spec</i>, derived_quantity_spec, <span class='keyword'>struct</span> dimensionless<span class='anglebracket'>></span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span>
|
||
</span>
|
||
where <span class='texttt'><i >to-quantity-spec</i></span> is defined as follows:
|
||
<span class='codeblock'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit___________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>using</span> <i >to-quantity-spec</i> <span class='operator'>=</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><i >get-associated-quantity</i><span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
</span></li></ul></div></div></div></div></div><div id='sym.fmt' class='section'><h4 ><a class='secnum' href='#sym.fmt' style='min-width:95pt'>5.4.4.10</a> Symbol formatting <a class='abbr_ref' href='qty.unit.sym.fmt.html'>[qty.unit.sym.fmt]</a></h4><div class='texpara'><div id='lib:Unit,unit_symbol_to'><div id='lib:unit_symbol_to,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unit_symbol_to,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> CharT <span class='operator'>=</span> <span class='keyword'>char</span>, std<span class='operator'>::</span>output_iterator<span class='anglebracket'><</span>CharT<span class='anglebracket'>></span> Out, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> Out unit_symbol_to<span class='parenthesis'>(</span>Out out, U u, <span class='keyword'>const</span> unit_symbol_formatting<span class='operator'>&</span> fmt <span class='operator'>=</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='sym.fmt-1'><div class='marginalizedparent'><a class='marginalized' href='#sym.fmt-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3319'>#</a></div><div class='texpara'><div id='sym.fmt-1.sentence-1' class='sentence'><i >Effects</i>: TBD<a class='hidden_link' href='#sym.fmt-1.sentence-1'>.</a></div></div></div></div><div class='para' id='sym.fmt-2'><div class='marginalizedparent'><a class='marginalized' href='#sym.fmt-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3323'>#</a></div><div class='texpara'><div id='sym.fmt-2.sentence-1' class='sentence'><i >Returns</i>: TBD<a class='hidden_link' href='#sym.fmt-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,unit_symbol'><div id='lib:unit_symbol,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unit_symbol,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span>unit_symbol_formatting fmt <span class='operator'>=</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>, <span class='keyword'>typename</span> CharT <span class='operator'>=</span> <span class='keyword'>char</span>, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> std<span class='operator'>::</span>string_view unit_symbol<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para' id='sym.fmt-3'><div class='marginalizedparent'><a class='marginalized' href='#sym.fmt-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3335'>#</a></div><div class='texpara'><div id='sym.fmt-3.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
|
||
<span class='codeblock'>TBD<span class='operator'>.</span>
|
||
</span></div></div></div></div></div></div></body></html> |