Deployed e9c5f723 to HEAD with MkDocs 1.6.1 and mike 2.1.3

This commit is contained in:
github-actions committed 2025-02-11 20:35:14 +00:00
1 parent 146f5e89ab
commit bf355182ca
127 files changed
+1395 -1394

No files matched your search

+33 -33
View File
@@ -2,13 +2,13 @@
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='texttt'><i >is-specialization-of</i></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><i ><span class='texttt'>see below</span></i><span class='anglebracket'>&gt;</span> <span class='keyword'>typename</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div></div><div class='para' id='non.types-1'><div class='marginalizedparent'><a class='marginalized' href='#non.types-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L710'>#</a></div><div class='texpara'><div id='non.types-1.sentence-1' class='sentence'><i >Returns</i>: <ul class='itemize'><li id='non.types-1.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#non.types-1.1'>(1.1)</a></div><div class='texpara'><div id='non.types-1.1.sentence-1' class='sentence'>For the first signature,
</code></div></div></div></div><div class='para' id='non.types-1'><div class='marginalizedparent'><a class='marginalized' href='#non.types-1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L710'>#</a></div><div class='texpara'><div id='non.types-1.sentence-1' class='sentence'><i >Returns</i>: <ul class='itemize'><li id='non.types-1.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#non.types-1.1'>(1.1)</a></div><div class='texpara'><div id='non.types-1.1.sentence-1' class='sentence'>For the first signature,
<span class='texttt'><span class='literal'>true</span></span> of <span class='texttt'>T</span> is a specialization of <span class='texttt'>U</span>, and
<span class='texttt'><span class='literal'>false</span></span> otherwise<a class='hidden_link' href='#non.types-1.1.sentence-1'>.</a></div></div></li><li id='non.types-1.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#non.types-1.2'>(1.2)</a></div><div class='texpara'><div id='non.types-1.2.sentence-1' class='sentence'>For the second signature,
<span class='texttt'><span class='literal'>true</span></span> if <span class='texttt'>T</span> has exactly one public base class
that is a specialization of <span class='texttt'>U</span>
and has no other base class that is a specialization of <span class='texttt'>U</span>, and
<span class='texttt'><span class='literal'>false</span></span> otherwise<a class='hidden_link' href='#non.types-1.2.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='para' id='non.types-2'><div class='marginalizedparent'><a class='marginalized' href='#non.types-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L725'>#</a></div><div class='texpara'><div id='non.types-2.sentence-1' class='sentence'><i >Remarks</i>: An implementation provides enough overloads for all arguments to <span class='texttt'>U</span><a class='hidden_link' href='#non.types-2.sentence-1'>.</a></div></div></div></div></div><div id='qty.ratio' class='section'><h3 ><a class='secnum' href='#qty.ratio' style='min-width:80pt'>5.3.2</a> Ratio <a class='abbr_ref' href='qty.ratio.html'>[qty.ratio]</a></h3><div class='texpara'><span id='lib:ratio,is-integral'><span id='lib:is-integral,ratio'><span id='lib:ratio,operator/'><span id='lib:operator/,ratio'><span id='lib:ratio,operator+'><span id='lib:operator+,ratio'><span id='lib:ratio,operator-'><span id='lib:operator-,ratio'><span id='lib:ratio,operator<=>'><span id='lib:operator<=>,ratio'><span id='lib:ratio,operator=='><span id='lib:operator==,ratio'><span id='lib:ratio'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:ratio'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='texttt'><span class='literal'>false</span></span> otherwise<a class='hidden_link' href='#non.types-1.2.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='para' id='non.types-2'><div class='marginalizedparent'><a class='marginalized' href='#non.types-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L725'>#</a></div><div class='texpara'><div id='non.types-2.sentence-1' class='sentence'><i >Remarks</i>: An implementation provides enough overloads for all arguments to <span class='texttt'>U</span><a class='hidden_link' href='#non.types-2.sentence-1'>.</a></div></div></div></div></div><div id='qty.ratio' class='section'><h3 ><a class='secnum' href='#qty.ratio' style='min-width:80pt'>5.3.2</a> Ratio <a class='abbr_ref' href='qty.ratio.html'>[qty.ratio]</a></h3><div class='texpara'><span id='lib:ratio,is-integral'><span id='lib:is-integral,ratio'><span id='lib:ratio,operator/'><span id='lib:operator/,ratio'><span id='lib:ratio,operator+'><span id='lib:operator+,ratio'><span id='lib:ratio,operator-'><span id='lib:operator-,ratio'><span id='lib:ratio,operator<=>'><span id='lib:operator<=>,ratio'><span id='lib:ratio,operator=='><span id='lib:operator==,ratio'><span id='lib:ratio'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:ratio'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>struct</span> <i >ratio</i> <span class='curlybracket'>{</span> <span class='comment'>// <i >exposition only</i></span>
std<span class='operator'>::</span>intmax_t num;
@@ -41,18 +41,18 @@ and has no other base class that is a specialization of <span class='texttt'>U</
<span class='keyword'>consteval</span> <i >ratio</i> <i >common-ratio</i><span class='parenthesis'>(</span><i >ratio</i> r1, <i >ratio</i> r2<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></div><div class='para' id='qty.ratio-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L775'>#</a></div><div class='texpara'><div id='qty.ratio-1.sentence-1' class='sentence'><span class='texttt'><i >ratio</i></span> represents the rational number <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.225em; 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><a class='hidden_link' href='#qty.ratio-1.sentence-1'>.</a></div></div></div><div class='para' id='qty.ratio-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L778'>#</a></div><div class='texpara'><div id='qty.ratio-2.sentence-1' class='sentence'>Unless otherwise specified,
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></div><div class='para' id='qty.ratio-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L775'>#</a></div><div class='texpara'><div id='qty.ratio-1.sentence-1' class='sentence'><span class='texttt'><i >ratio</i></span> represents the rational number <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.225em; 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><a class='hidden_link' href='#qty.ratio-1.sentence-1'>.</a></div></div></div><div class='para' id='qty.ratio-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L778'>#</a></div><div class='texpara'><div id='qty.ratio-2.sentence-1' class='sentence'>Unless otherwise specified,
in the following descriptions,
let <span class='texttt'>R<span class='parenthesis'>(</span>r<span class='parenthesis'>)</span></span> be <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>ratio<span class='anglebracket'>&lt;</span>N, D<span class='anglebracket'>&gt;</span></span>,
where <span class='texttt'>N</span> and <span class='texttt'>D</span> are the values of <span class='texttt'>r<span class='operator'>.</span>num</span> and <span class='texttt'>r<span class='operator'>.</span>den</span><a class='hidden_link' href='#qty.ratio-2.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:ratio,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:ratio,constructor'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <span class='texttt'><i >ratio</i></span><span class='parenthesis'>(</span>std<span class='operator'>::</span>intmax_t n, std<span class='operator'>::</span>intmax_t d <span class='operator'>=</span> <span class='literal'>1</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='qty.ratio-3'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L790'>#</a></div><div class='texpara'><div id='qty.ratio-3.sentence-1' class='sentence'>Let <span class='texttt'>N</span> and <span class='texttt'>D</span> be the values of <span class='texttt'>n</span> and <span class='texttt'>d</span><a class='hidden_link' href='#qty.ratio-3.sentence-1'>.</a></div> <div id='qty.ratio-3.sentence-2' class='sentence'>Let <span class='texttt'>R</span> be <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>ratio<span class='anglebracket'>&lt;</span>N, D<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.ratio-3.sentence-2'>.</a></div></div></div></div><div class='para' id='qty.ratio-4'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L794'>#</a></div><div class='texpara'><div id='qty.ratio-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to
<span class='texttt'>R</span><a class='hidden_link' href='#qty.ratio-4.sentence-1'>.</a></div></div></div></div><div class='para' id='qty.ratio-5'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L799'>#</a></div><div class='texpara'><div id='qty.ratio-5.sentence-1' class='sentence'><i >Postconditions</i>: <span class='texttt'>num <span class='operator'>=</span><span class='operator'>=</span> R<span class='operator'>&#x200b;::&#x200b;</span>num <span class='operator'>&amp;</span><span class='operator'>&amp;</span> den <span class='operator'>=</span><span class='operator'>=</span> R<span class='operator'>&#x200b;::&#x200b;</span>den</span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#qty.ratio-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:ratio,operator*'><div id='lib:operator*,ratio'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,ratio'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='texttt'><i >ratio</i></span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><span class='texttt'><i >ratio</i></span> lhs, <span class='texttt'><i >ratio</i></span> rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='qty.ratio-6'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L810'>#</a></div><div class='texpara'><div id='qty.ratio-6.sentence-1' class='sentence'>Let <span class='texttt'>Res</span> be <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>ratio_<span class='shy'></span>multiply<span class='anglebracket'>&lt;</span>R<span class='parenthesis'>(</span>lhs<span class='parenthesis'>)</span>, R<span class='parenthesis'>(</span>rhs<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.ratio-6.sentence-1'>.</a></div></div></div></div><div class='para' id='qty.ratio-7'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L813'>#</a></div><div class='texpara'><div id='qty.ratio-7.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
</code></div></div></div><div class='para' id='qty.ratio-3'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L790'>#</a></div><div class='texpara'><div id='qty.ratio-3.sentence-1' class='sentence'>Let <span class='texttt'>N</span> and <span class='texttt'>D</span> be the values of <span class='texttt'>n</span> and <span class='texttt'>d</span><a class='hidden_link' href='#qty.ratio-3.sentence-1'>.</a></div> <div id='qty.ratio-3.sentence-2' class='sentence'>Let <span class='texttt'>R</span> be <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>ratio<span class='anglebracket'>&lt;</span>N, D<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.ratio-3.sentence-2'>.</a></div></div></div></div><div class='para' id='qty.ratio-4'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L794'>#</a></div><div class='texpara'><div id='qty.ratio-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to
<span class='texttt'>R</span><a class='hidden_link' href='#qty.ratio-4.sentence-1'>.</a></div></div></div></div><div class='para' id='qty.ratio-5'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L799'>#</a></div><div class='texpara'><div id='qty.ratio-5.sentence-1' class='sentence'><i >Postconditions</i>: <span class='texttt'>num <span class='operator'>=</span><span class='operator'>=</span> R<span class='operator'>&#x200b;::&#x200b;</span>num <span class='operator'>&amp;</span><span class='operator'>&amp;</span> den <span class='operator'>=</span><span class='operator'>=</span> R<span class='operator'>&#x200b;::&#x200b;</span>den</span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#qty.ratio-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:ratio,operator*'><div id='lib:operator*,ratio'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,ratio'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='texttt'><i >ratio</i></span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><span class='texttt'><i >ratio</i></span> lhs, <span class='texttt'><i >ratio</i></span> rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='qty.ratio-6'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L810'>#</a></div><div class='texpara'><div id='qty.ratio-6.sentence-1' class='sentence'>Let <span class='texttt'>Res</span> be <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>ratio_<span class='shy'></span>multiply<span class='anglebracket'>&lt;</span>R<span class='parenthesis'>(</span>lhs<span class='parenthesis'>)</span>, R<span class='parenthesis'>(</span>rhs<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.ratio-6.sentence-1'>.</a></div></div></div></div><div class='para' id='qty.ratio-7'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L813'>#</a></div><div class='texpara'><div id='qty.ratio-7.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> <span class='curlybracket'>{</span>Res<span class='operator'>&#x200b;::&#x200b;</span>num, Res<span class='operator'>&#x200b;::&#x200b;</span>den<span class='curlybracket'>}</span>;</span></div></div></div></div><div class='texpara'><div id='lib:ratio,common-ratio'><div id='lib:common-ratio,ratio'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:common-ratio,ratio'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <span class='texttt'><i >ratio</i></span> <span class='texttt'><i >common-ratio</i></span><span class='parenthesis'>(</span><span class='texttt'><i >ratio</i></span> r1, <span class='texttt'><i >ratio</i></span> r2<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='qty.ratio-8'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L825'>#</a></div><div class='texpara'><div id='qty.ratio-8.sentence-1' class='sentence'>Let <span class='texttt'>Res</span> be equal to
</code></div></div></div></div><div class='para' id='qty.ratio-8'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L825'>#</a></div><div class='texpara'><div id='qty.ratio-8.sentence-1' class='sentence'>Let <span class='texttt'>Res</span> be equal to
<span class='codeblock'>std<span class='operator'>::</span>common_type<span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'>&lt;</span><span class='keyword'>int</span>, R<span class='parenthesis'>(</span>r1<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>,
std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'>&lt;</span><span class='keyword'>int</span>, R<span class='parenthesis'>(</span>r2<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='operator'>::</span>type<span class='operator'>::</span>period
</span></div></div></div></div><div class='para' id='qty.ratio-9'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L832'>#</a></div><div class='texpara'><div id='qty.ratio-9.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
</span></div></div></div></div><div class='para' id='qty.ratio-9'><div class='marginalizedparent'><a class='marginalized' href='#qty.ratio-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L832'>#</a></div><div class='texpara'><div id='qty.ratio-9.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> <span class='curlybracket'>{</span>Res<span class='operator'>&#x200b;::&#x200b;</span>num, Res<span class='operator'>&#x200b;::&#x200b;</span>den<span class='curlybracket'>}</span>;</span></div></div></div></div></div><div id='qty.sym.txt' class='section'><h3 ><a class='secnum' href='#qty.sym.txt' style='min-width:80pt'>5.3.3</a> Symbol text <a class='abbr_ref' href='qty.sym.txt.html'>[qty.sym.txt]</a></h3><div class='texpara'><span id='lib:symbol_text'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:symbol_text'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>size_t N, std<span class='operator'>::</span>size_t M<span class='anglebracket'>&gt;</span>
@@ -103,8 +103,8 @@ symbol_text<span class='parenthesis'>(</span><span class='keyword'>const</span>
symbol_text<span class='parenthesis'>(</span><span class='keyword'>const</span> std<span class='operator'>::</span>fixed_u8string<span class='anglebracket'>&lt;</span>N<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span>, <span class='keyword'>const</span> std<span class='operator'>::</span>fixed_string<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> symbol_text<span class='anglebracket'>&lt;</span>N, M<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='para' id='qty.sym.txt-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.txt-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L894'>#</a></div><div class='texpara'><div id='qty.sym.txt-1.sentence-1' class='sentence'><span class='texttt'>symbol_<span class='shy'></span>text</span> represents a symbol text<a class='hidden_link' href='#qty.sym.txt-1.sentence-1'>.</a></div> <div id='qty.sym.txt-1.sentence-2' class='sentence'><span class='texttt'><i >utf8</i></span> stores its UTF-8 representation, and
<span class='texttt'><i >portable</i></span> stores its portable representation<a class='hidden_link' href='#qty.sym.txt-1.sentence-2'>.</a></div> <div id='qty.sym.txt-1.sentence-3' class='sentence'><span class='texttt'>symbol_<span class='shy'></span>text<span class='anglebracket'>&lt;</span>N, M<span class='anglebracket'>&gt;</span></span> is a structural type (<a href="https://wg21.link/temp.paramterm.structural.type">N4971, [temp.param]</a>)<a class='hidden_link' href='#qty.sym.txt-1.sentence-3'>.</a></div></div></div><div class='para' id='qty.sym.txt-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.txt-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L900'>#</a></div><div class='texpara'><div id='qty.sym.txt-2.sentence-1' class='sentence'>In the descriptions that follow,
</span></span></div><div class='para' id='qty.sym.txt-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.txt-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L894'>#</a></div><div class='texpara'><div id='qty.sym.txt-1.sentence-1' class='sentence'><span class='texttt'>symbol_<span class='shy'></span>text</span> represents a symbol text<a class='hidden_link' href='#qty.sym.txt-1.sentence-1'>.</a></div> <div id='qty.sym.txt-1.sentence-2' class='sentence'><span class='texttt'><i >utf8</i></span> stores its UTF-8 representation, and
<span class='texttt'><i >portable</i></span> stores its portable representation<a class='hidden_link' href='#qty.sym.txt-1.sentence-2'>.</a></div> <div id='qty.sym.txt-1.sentence-3' class='sentence'><span class='texttt'>symbol_<span class='shy'></span>text<span class='anglebracket'>&lt;</span>N, M<span class='anglebracket'>&gt;</span></span> is a structural type (<a href="https://wg21.link/temp.paramterm.structural.type">N4971, [temp.param]</a>)<a class='hidden_link' href='#qty.sym.txt-1.sentence-3'>.</a></div></div></div><div class='para' id='qty.sym.txt-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.txt-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L900'>#</a></div><div class='texpara'><div id='qty.sym.txt-2.sentence-1' class='sentence'>In the descriptions that follow,
it is a <i >Precondition</i> that
<ul class='itemize'><li id='qty.sym.txt-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.sym.txt-2.1'>(2.1)</a></div>values of <span class='texttt'><span class='keyword'>char</span></span> are in the basic literal character set (<a href="https://wg21.link/lex.charset">N4971, [lex.charset]</a>), and</li><li id='qty.sym.txt-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.sym.txt-2.2'>(2.2)</a></div>for a parameter of the form <span class='texttt'><span class='keyword'>const</span> <i >CharT</i> <span class='parenthesis'>(</span><span class='operator'>&amp;</span><i >txt</i><span class='parenthesis'>)</span><span class='squarebracket'>[</span><i >M</i><span class='squarebracket'>]</span></span>,
<span class='texttt'><span class='parenthesis'>(</span><i >txt</i><span class='squarebracket'>[</span><i >M</i> <span class='operator'>-</span> <span class='literal'>1</span><span class='squarebracket'>]</span> <span class='operator'>=</span><span class='operator'>=</span> <i >CharT</i><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#qty.sym.txt-2.sentence-1'>.</a></li></ul></div></div></div><div class='texpara'><div id='lib:symbol_text,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:symbol_text,constructor'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>constexpr</span> symbol_text<span class='parenthesis'>(</span><span class='keyword'>char</span> portable<span class='parenthesis'>)</span>;
@@ -112,15 +112,15 @@ it is a <i >Precondition</i> that
<span class='keyword'>constexpr</span> symbol_text<span class='parenthesis'>(</span><span class='keyword'>const</span> std<span class='operator'>::</span>fixed_string<span class='anglebracket'>&lt;</span>N<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> portable<span class='parenthesis'>)</span>;
<span class='keyword'>consteval</span> symbol_text<span class='parenthesis'>(</span><span class='keyword'>const</span> <span class='keyword'>char8_t</span> <span class='parenthesis'>(</span><span class='operator'>&amp;</span>utf8<span class='parenthesis'>)</span><span class='squarebracket'>[</span>N <span class='operator'>+</span> <span class='literal'>1</span><span class='squarebracket'>]</span>, <span class='keyword'>const</span> <span class='keyword'>char</span> <span class='parenthesis'>(</span><span class='operator'>&amp;</span>portable<span class='parenthesis'>)</span><span class='squarebracket'>[</span>M <span class='operator'>+</span> <span class='literal'>1</span><span class='squarebracket'>]</span><span class='parenthesis'>)</span>;
<span class='keyword'>constexpr</span> symbol_text<span class='parenthesis'>(</span><span class='keyword'>const</span> std<span class='operator'>::</span>fixed_u8string<span class='anglebracket'>&lt;</span>N<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> utf8, <span class='keyword'>const</span> std<span class='operator'>::</span>fixed_string<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> portable<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para' id='qty.sym.txt-3'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.txt-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L921'>#</a></div><div class='texpara'><div id='qty.sym.txt-3.sentence-1' class='sentence'>For the constructors without a parameter named <span class='texttt'>utf8</span>,
</code></div></div></div><div class='para' id='qty.sym.txt-3'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.txt-3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L921'>#</a></div><div class='texpara'><div id='qty.sym.txt-3.sentence-1' class='sentence'>For the constructors without a parameter named <span class='texttt'>utf8</span>,
let <span class='texttt'>utf8</span> be:
<span class='codeblock'>std<span class='operator'>::</span>bit_cast<span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>fixed_u8string<span class='anglebracket'>&lt;</span>N<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>std<span class='operator'>::</span>basic_fixed_string<span class='parenthesis'>(</span>portable<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
</span></div></div></div></div><div class='para' id='qty.sym.txt-4'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.txt-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L928'>#</a></div><div class='texpara'><div id='qty.sym.txt-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to the <span class='textsf'><i >mem-initializer-list</i></span>:
</span></div></div></div></div><div class='para' id='qty.sym.txt-4'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.txt-4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L928'>#</a></div><div class='texpara'><div id='qty.sym.txt-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to the <span class='textsf'><i >mem-initializer-list</i></span>:
<span class='codeblock'><i >utf8</i><span class='curlybracket'>{</span>utf8<span class='curlybracket'>}</span>, <i >portable</i><span class='curlybracket'>{</span>portable<span class='curlybracket'>}</span>
</span></div></div></div></div><div class='texpara'><div id='lib:symbol_text,operator+'><div id='lib:operator+,symbol_text'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator+,symbol_text'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>size_t N2, std<span class='operator'>::</span>size_t M2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> symbol_text<span class='anglebracket'>&lt;</span>N <span class='operator'>+</span> N2, M <span class='operator'>+</span> M2<span class='anglebracket'>&gt;</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='keyword'>const</span> symbol_text<span class='operator'>&amp;</span> lhs,
<span class='keyword'>const</span> symbol_text<span class='anglebracket'>&lt;</span>N2, M2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para' id='qty.sym.txt-5'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.txt-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L944'>#</a></div><div class='texpara'><div id='qty.sym.txt-5.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
</code></div></div></div></div><div class='para' id='qty.sym.txt-5'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.txt-5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L944'>#</a></div><div class='texpara'><div id='qty.sym.txt-5.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> symbol_text<span class='anglebracket'>&lt;</span>N <span class='operator'>+</span> N2, M <span class='operator'>+</span> M2<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>lhs<span class='operator'>.</span>utf8<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>+</span> rhs<span class='operator'>.</span>utf8<span class='parenthesis'>(</span><span class='parenthesis'>)</span>,
lhs<span class='operator'>.</span>portable<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>+</span> rhs<span class='operator'>.</span>portable<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:symbol_text,operator<=>'><div id='lib:operator<=>,symbol_text'><div id='lib:symbol_text,operator=='><div id='lib:operator==,symbol_text'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator==,symbol_text'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>size_t N2, std<span class='operator'>::</span>size_t M2<span class='anglebracket'>&gt;</span>
@@ -129,10 +129,10 @@ let <span class='texttt'>utf8</span> be:
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>size_t N2, std<span class='operator'>::</span>size_t M2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='keyword'>const</span> symbol_text<span class='operator'>&amp;</span> lhs,
<span class='keyword'>const</span> symbol_text<span class='anglebracket'>&lt;</span>N2, M2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
</code></div></div></div></div></div></div><div class='para' id='qty.sym.txt-6'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.txt-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L965'>#</a></div><div class='texpara'><div id='qty.sym.txt-6.sentence-1' class='sentence'>Let <span class='texttt'>@</span> be the <span class='textsf'><i >operator</i></span><a class='hidden_link' href='#qty.sym.txt-6.sentence-1'>.</a></div></div></div></div><div class='para' id='qty.sym.txt-7'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.txt-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L968'>#</a></div><div class='texpara'><div id='qty.sym.txt-7.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
</code></div></div></div></div></div></div><div class='para' id='qty.sym.txt-6'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.txt-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L965'>#</a></div><div class='texpara'><div id='qty.sym.txt-6.sentence-1' class='sentence'>Let <span class='texttt'>@</span> be the <span class='textsf'><i >operator</i></span><a class='hidden_link' href='#qty.sym.txt-6.sentence-1'>.</a></div></div></div></div><div class='para' id='qty.sym.txt-7'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.txt-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L968'>#</a></div><div class='texpara'><div id='qty.sym.txt-7.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> std<span class='operator'>::</span>make_tuple<span class='parenthesis'>(</span>std<span class='operator'>::</span>cref<span class='parenthesis'>(</span>lhs<span class='operator'>.</span>utf8<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>, std<span class='operator'>::</span>cref<span class='parenthesis'>(</span>lhs<span class='operator'>.</span>portable<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> @
std<span class='operator'>::</span>make_tuple<span class='parenthesis'>(</span>std<span class='operator'>::</span>cref<span class='parenthesis'>(</span>rhs<span class='operator'>.</span>utf8<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>, std<span class='operator'>::</span>cref<span class='parenthesis'>(</span>rhs<span class='operator'>.</span>portable<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</span></div></div></div></div></div><div id='qty.sym.expr' class='section'><h3 ><a class='secnum' href='#qty.sym.expr' style='min-width:80pt'>5.3.4</a> Symbolic expressions <a class='abbr_ref' href='qty.sym.expr.html'>[qty.sym.expr]</a></h3><div id='qty.sym.expr.general' class='section'><h4 ><a class='secnum' href='#qty.sym.expr.general' style='min-width:95pt'>5.3.4.1</a> General <a class='abbr_ref' href='qty.sym.expr.general.html'>[qty.sym.expr.general]</a></h4><div class='para' id='qty.sym.expr.general-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.general-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L981'>#</a></div><div class='texpara'><div id='qty.sym.expr.general-1.sentence-1' class='sentence'>Subclause <a href='#qty.sym.expr' title='5.3.4&emsp;Symbolic expressions'>[qty.<span class='shy'></span>sym.<span class='shy'></span>expr]</a> specifies the components
</span></div></div></div></div></div><div id='qty.sym.expr' class='section'><h3 ><a class='secnum' href='#qty.sym.expr' style='min-width:80pt'>5.3.4</a> Symbolic expressions <a class='abbr_ref' href='qty.sym.expr.html'>[qty.sym.expr]</a></h3><div id='qty.sym.expr.general' class='section'><h4 ><a class='secnum' href='#qty.sym.expr.general' style='min-width:95pt'>5.3.4.1</a> General <a class='abbr_ref' href='qty.sym.expr.general.html'>[qty.sym.expr.general]</a></h4><div class='para' id='qty.sym.expr.general-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.general-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L981'>#</a></div><div class='texpara'><div id='qty.sym.expr.general-1.sentence-1' class='sentence'>Subclause <a href='#qty.sym.expr' title='5.3.4&emsp;Symbolic expressions'>[qty.<span class='shy'></span>sym.<span class='shy'></span>expr]</a> specifies the components
used to maintain ordered, simplified, and readable
argument lists in the names of specializations<a class='hidden_link' href='#qty.sym.expr.general-1.sentence-1'>.</a></div> <div id='qty.sym.expr.general-example-1' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#qty.sym.expr.general-example-1'>1</a></i>:&ensp;<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> kg <span class='operator'>*</span> km <span class='operator'>/</span> square<span class='parenthesis'>(</span>h<span class='parenthesis'>)</span>; <span class='comment'>// error: cannot construct from</span>
@@ -145,7 +145,7 @@ provided that, in the implementation-defined total order of types,
std<span class='operator'>::</span>is_empty_v<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> std<span class='operator'>::</span>is_final_v<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> std<span class='operator'>::</span>is_trivially_default_constructible_v<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
std<span class='operator'>::</span>is_trivially_copy_constructible_v<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> std<span class='operator'>::</span>is_trivially_move_constructible_v<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
std<span class='operator'>::</span>is_trivially_destructible_v<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
</code></div></div><div class='para' id='qty.sym.expr.concepts-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.concepts-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1006'>#</a></div><div class='texpara'><div id='qty.sym.expr.concepts-1.sentence-1' class='sentence'>The concept <a href='#concept:SymbolicConstant' title='5.3.4.2&emsp;Concept SymbolicConstant&emsp;[qty.sym.expr.concepts]'><span id='conceptref:SymbolicConstant'><span class='texttt'><i >SymbolicConstant</i></span></span></a>
</code></div></div><div class='para' id='qty.sym.expr.concepts-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.concepts-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1006'>#</a></div><div class='texpara'><div id='qty.sym.expr.concepts-1.sentence-1' class='sentence'>The concept <a href='#concept:SymbolicConstant' title='5.3.4.2&emsp;Concept SymbolicConstant&emsp;[qty.sym.expr.concepts]'><span id='conceptref:SymbolicConstant'><span class='texttt'><i >SymbolicConstant</i></span></span></a>
is used to constrain the types
that are used in symbolic expressions<a class='hidden_link' href='#qty.sym.expr.concepts-1.sentence-1'>.</a></div></div></div></div><div id='qty.sym.expr.types' class='section'><h4 ><a class='secnum' href='#qty.sym.expr.types' style='min-width:95pt'>5.3.4.3</a> Types <a class='abbr_ref' href='qty.sym.expr.types.html'>[qty.sym.expr.types]</a></h4><div class='texpara'><span id='lib:per'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:per'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
@@ -153,7 +153,7 @@ that are used in symbolic expressions<a class='hidden_link' href='#qty.sym.expr.
<span class='keyword'>struct</span> per <span class='keyword'>final</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='para' id='qty.sym.expr.types-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.types-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1023'>#</a></div><div class='texpara'><div id='qty.sym.expr.types-1.sentence-1' class='sentence'><span class='texttt'>per</span> is used to store arguments with negative exponents<a class='hidden_link' href='#qty.sym.expr.types-1.sentence-1'>.</a></div> <div id='qty.sym.expr.types-1.sentence-2' class='sentence'>A specialization of <span class='texttt'>per</span>
</span></span></div><div class='para' id='qty.sym.expr.types-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.types-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1023'>#</a></div><div class='texpara'><div id='qty.sym.expr.types-1.sentence-1' class='sentence'><span class='texttt'>per</span> is used to store arguments with negative exponents<a class='hidden_link' href='#qty.sym.expr.types-1.sentence-1'>.</a></div> <div id='qty.sym.expr.types-1.sentence-2' class='sentence'>A specialization of <span class='texttt'>per</span>
represents the product of the inverse of its template arguments<a class='hidden_link' href='#qty.sym.expr.types-1.sentence-2'>.</a></div> <div id='qty.sym.expr.types-1.sentence-3' class='sentence'>A program that instantiates a specialization of <span class='texttt'>per</span>
that is not a possible result of the library specifications
is ill-formed, no diagnostic required<a class='hidden_link' href='#qty.sym.expr.types-1.sentence-3'>.</a></div></div><div class='texpara'><span id='lib:power'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:power'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
@@ -166,27 +166,27 @@ is ill-formed, no diagnostic required<a class='hidden_link' href='#qty.sym.expr.
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div></div><div class='para' id='qty.sym.expr.types-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.types-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1045'>#</a></div><div class='texpara'><div id='qty.sym.expr.types-2.sentence-1' class='sentence'><span class='texttt'>power</span> represents a power (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-02-08">IEC 60050, 102-02-08</a>)
</span></span></div></div><div class='para' id='qty.sym.expr.types-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.types-2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1045'>#</a></div><div class='texpara'><div id='qty.sym.expr.types-2.sentence-1' class='sentence'><span class='texttt'>power</span> represents a power (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-02-08">IEC 60050, 102-02-08</a>)
of the form <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.225em;">F</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='#qty.sym.expr.types-2.sentence-1'>.</a></div> <div id='qty.sym.expr.types-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#qty.sym.expr.types-note-1'>1</a></i>:&ensp;<div id='qty.sym.expr.types-2.sentence-2' class='sentence'><span class='texttt'>Den</span> is optional to shorten the type name when <span class='texttt'>Den</span> is <span class='texttt'><span class='literal'>1</span></span><a class='hidden_link' href='#qty.sym.expr.types-2.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div> <div id='qty.sym.expr.types-2.sentence-3' class='sentence'>
A program that instantiates a specialization of <span class='texttt'>power</span>
that is not a possible result of the library specifications
is ill-formed, no diagnostic required<a class='hidden_link' href='#qty.sym.expr.types-2.sentence-3'>.</a></div></div></div><div class='para' id='qty.sym.expr.types-3'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.types-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1055'>#</a></div><div class='texpara'><div id='qty.sym.expr.types-3.sentence-1' class='sentence'>Let <span class='texttt'>r</span> be <span class='texttt'><span class='texttt'><i >ratio</i></span><span class='curlybracket'>{</span>Num, Den<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='curlybracket'>}</span></span><a class='hidden_link' href='#qty.sym.expr.types-3.sentence-1'>.</a></div> <div id='qty.sym.expr.types-3.sentence-2' class='sentence'>Let <span class='texttt'><i >is-valid-ratio</i></span> be
is ill-formed, no diagnostic required<a class='hidden_link' href='#qty.sym.expr.types-2.sentence-3'>.</a></div></div></div><div class='para' id='qty.sym.expr.types-3'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.types-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1055'>#</a></div><div class='texpara'><div id='qty.sym.expr.types-3.sentence-1' class='sentence'>Let <span class='texttt'>r</span> be <span class='texttt'><span class='texttt'><i >ratio</i></span><span class='curlybracket'>{</span>Num, Den<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='curlybracket'>}</span></span><a class='hidden_link' href='#qty.sym.expr.types-3.sentence-1'>.</a></div> <div id='qty.sym.expr.types-3.sentence-2' class='sentence'>Let <span class='texttt'><i >is-valid-ratio</i></span> be
<span class='texttt'><span class='literal'>true</span></span> if <span class='texttt'>r</span> is a valid constant expression, and
<span class='texttt'><span class='literal'>false</span></span> otherwise<a class='hidden_link' href='#qty.sym.expr.types-3.sentence-2'>.</a></div> <div id='qty.sym.expr.types-3.sentence-3' class='sentence'>The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><i >is-valid-ratio</i> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span>r <span class='anglebracket'>&gt;</span> <i >ratio</i><span class='curlybracket'>{</span><span class='literal'>0</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span>r <span class='operator'>!</span><span class='operator'>=</span> <i >ratio</i><span class='curlybracket'>{</span><span class='literal'>1</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>
</span></div></div></div></div><div id='qty.sym.expr.algos' class='section'><h4 ><a class='secnum' href='#qty.sym.expr.algos' style='min-width:95pt'>5.3.4.4</a> Algorithms <a class='abbr_ref' href='qty.sym.expr.algos.html'>[qty.sym.expr.algos]</a></h4><div class='texpara'><span id='lib:expr-type'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:expr-type'>🔗</a></div><span class='codeblock'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>using</span> <i >expr-type</i> <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>; <span class='comment'>// <i >exposition only</i></span>
</span></span></div><div class='para' id='qty.sym.expr.algos-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1073'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-1.sentence-1' class='sentence'><span class='texttt'><span class='texttt'><i >expr-type</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span></span> denotes
</span></span></div><div class='para' id='qty.sym.expr.algos-1'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1073'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-1.sentence-1' class='sentence'><span class='texttt'><span class='texttt'><i >expr-type</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span></span> denotes
<span class='texttt'>U</span> if <span class='texttt'>T</span> is of the form <span class='texttt'>power<span class='anglebracket'>&lt;</span>U, Ints<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span></span>, and
<span class='texttt'>T</span> otherwise<a class='hidden_link' href='#qty.sym.expr.algos-1.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:type-less-impl'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:type-less-impl'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, <span class='keyword'>typename</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='texttt'><i >type-less-impl</i></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div><div class='para' id='qty.sym.expr.algos-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1085'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-2.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='literal'>true</span></span> if <span class='texttt'>T</span> is less than <span class='texttt'>U</span>
</code></div></div></div><div class='para' id='qty.sym.expr.algos-2'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1085'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-2.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='literal'>true</span></span> if <span class='texttt'>T</span> is less than <span class='texttt'>U</span>
in an implementation-defined total order for types, and
<span class='texttt'><span class='literal'>false</span></span> otherwise<a class='hidden_link' href='#qty.sym.expr.algos-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><span id='lib:type-less'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:type-less'>🔗</a></div><span class='codeblock'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Lhs, <span class='keyword'>typename</span> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <i >type-less</i> <span class='operator'>:</span> <span class='comment'>// <i >exposition only</i></span>
std<span class='operator'>::</span>bool_constant<span class='anglebracket'>&lt;</span><i >is-specialization-of</i><span class='anglebracket'>&lt;</span>Rhs, power<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
<i >type-less-impl</i><span class='anglebracket'>&lt;</span><i >expr-type</i><span class='anglebracket'>&lt;</span>Lhs<span class='anglebracket'>&gt;</span>, <i >expr-type</i><span class='anglebracket'>&lt;</span>Rhs<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
</span></span></div><div class='para' id='qty.sym.expr.algos-3'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1100'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-3.sentence-1' class='sentence'><span class='texttt'><i >type-less</i></span> meets the requirements of
</span></span></div><div class='para' id='qty.sym.expr.algos-3'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1100'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-3.sentence-1' class='sentence'><span class='texttt'><i >type-less</i></span> meets the requirements of
the <span class='texttt'>Pred</span> parameter of the symbolic expression algorithms below<a class='hidden_link' href='#qty.sym.expr.algos-3.sentence-1'>.</a></div></div><div class='texpara'><span id='lib:expr-fractions'><span id='lib:type-list'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:type-list'>🔗</a></div><span class='codeblock'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Ts<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <i >type-list</i> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>; <span class='comment'>// <i >exposition only</i></span>
@@ -195,10 +195,10 @@ the <span class='texttt'>Pred</span> parameter of the symbolic expression algori
<span class='keyword'>using</span> <i >num</i> <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>using</span> <i >den</i> <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>; <span class='comment'>// <i >exposition only</i></span>
<span class='curlybracket'>}</span>
</span></span></span></div></div><div class='para' id='qty.sym.expr.algos-4'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1117'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-4.sentence-1' class='sentence'><span class='texttt'><i >expr-fractions</i></span> divides a symbolic expression to numerator and denominator parts<a class='hidden_link' href='#qty.sym.expr.algos-4.sentence-1'>.</a></div> <div id='qty.sym.expr.algos-4.sentence-2' class='sentence'>Let <span class='texttt'>EF</span> be a specialization of <span class='texttt'><i >expr-fractions</i></span><a class='hidden_link' href='#qty.sym.expr.algos-4.sentence-2'>.</a></div> <ul class='itemize'><li id='qty.sym.expr.algos-4.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.sym.expr.algos-4.1'>(4.1)</a></div><div class='texpara'><div id='qty.sym.expr.algos-4.1.sentence-1' class='sentence'>If <span class='texttt'>EF</span> is of the form <span class='texttt'><span class='texttt'><i >expr-fractions</i></span><span class='anglebracket'>&lt;</span>OneType, Ts<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span>, per<span class='anglebracket'>&lt;</span>Us<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span></span>,
</span></span></span></div></div><div class='para' id='qty.sym.expr.algos-4'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1117'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-4.sentence-1' class='sentence'><span class='texttt'><i >expr-fractions</i></span> divides a symbolic expression to numerator and denominator parts<a class='hidden_link' href='#qty.sym.expr.algos-4.sentence-1'>.</a></div> <div id='qty.sym.expr.algos-4.sentence-2' class='sentence'>Let <span class='texttt'>EF</span> be a specialization of <span class='texttt'><i >expr-fractions</i></span><a class='hidden_link' href='#qty.sym.expr.algos-4.sentence-2'>.</a></div> <ul class='itemize'><li id='qty.sym.expr.algos-4.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.sym.expr.algos-4.1'>(4.1)</a></div><div class='texpara'><div id='qty.sym.expr.algos-4.1.sentence-1' class='sentence'>If <span class='texttt'>EF</span> is of the form <span class='texttt'><span class='texttt'><i >expr-fractions</i></span><span class='anglebracket'>&lt;</span>OneType, Ts<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span>, per<span class='anglebracket'>&lt;</span>Us<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span></span>,
then
<ul class='itemize'><li id='qty.sym.expr.algos-4.1.1'><div class='marginalizedparent' style='left:-36mm'><a class='marginalized' href='#qty.sym.expr.algos-4.1.1'>(4.1.1)</a></div><span class='texttt'>EF<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >num</i></span></span> denotes <span class='texttt'><span class='texttt'><i >type-list</i></span><span class='anglebracket'>&lt;</span>Ts<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span></span>, and</li><li id='qty.sym.expr.algos-4.1.2'><div class='marginalizedparent' style='left:-36mm'><a class='marginalized' href='#qty.sym.expr.algos-4.1.2'>(4.1.2)</a></div><span class='texttt'>EF<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >den</i></span></span> denotes <span class='texttt'><span class='texttt'><i >type-list</i></span><span class='anglebracket'>&lt;</span>Us<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.sym.expr.algos-4.1.sentence-1'>.</a></li></ul></div></div></li><li id='qty.sym.expr.algos-4.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.sym.expr.algos-4.2'>(4.2)</a></div><div class='texpara'><div id='qty.sym.expr.algos-4.2.sentence-1' class='sentence'>Otherwise, <span class='texttt'>EF</span> is of the form <span class='texttt'><span class='texttt'><i >expr-fractions</i></span><span class='anglebracket'>&lt;</span>OneType, Ts<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span></span>, and
<ul class='itemize'><li id='qty.sym.expr.algos-4.2.1'><div class='marginalizedparent' style='left:-36mm'><a class='marginalized' href='#qty.sym.expr.algos-4.2.1'>(4.2.1)</a></div><span class='texttt'>EF<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >num</i></span></span> denotes <span class='texttt'><span class='texttt'><i >type-list</i></span><span class='anglebracket'>&lt;</span>Ts<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span></span>, and</li><li id='qty.sym.expr.algos-4.2.2'><div class='marginalizedparent' style='left:-36mm'><a class='marginalized' href='#qty.sym.expr.algos-4.2.2'>(4.2.2)</a></div><span class='texttt'>EF<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >den</i></span></span> denotes <span class='texttt'><span class='texttt'><i >type-list</i></span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.sym.expr.algos-4.2.sentence-1'>.</a></li></ul></div></div></li></ul></div></div><div class='para' id='qty.sym.expr.algos-5'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1140'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-5.sentence-1' class='sentence'>The symbolic expression algorithms perform operations on symbolic constants<a class='hidden_link' href='#qty.sym.expr.algos-5.sentence-1'>.</a></div> <div id='qty.sym.expr.algos-5.sentence-2' class='sentence'>A symbolic constant is a type that is a model of <a href='#concept:SymbolicConstant' title='5.3.4.2&emsp;Concept SymbolicConstant&emsp;[qty.sym.expr.concepts]'><span id='conceptref:SymbolicConstant_'><span class='texttt'><i >SymbolicConstant</i></span></span></a><a class='hidden_link' href='#qty.sym.expr.algos-5.sentence-2'>.</a></div> <div id='qty.sym.expr.algos-example-1' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#qty.sym.expr.algos-example-1'>1</a></i>:&ensp;<div id='qty.sym.expr.algos-5.sentence-3' class='sentence'>The dimension <span class='texttt'>dim_<span class='shy'></span>length</span>, the quantity <span class='texttt'>time</span>, and the unit <span class='texttt'>one</span> are symbolic constants<a class='hidden_link' href='#qty.sym.expr.algos-5.sentence-3'>.</a></div> —&nbsp;<i>end example</i>]</div></div> <div id='qty.sym.expr.algos-5.sentence-4' class='sentence'>
<ul class='itemize'><li id='qty.sym.expr.algos-4.2.1'><div class='marginalizedparent' style='left:-36mm'><a class='marginalized' href='#qty.sym.expr.algos-4.2.1'>(4.2.1)</a></div><span class='texttt'>EF<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >num</i></span></span> denotes <span class='texttt'><span class='texttt'><i >type-list</i></span><span class='anglebracket'>&lt;</span>Ts<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span></span>, and</li><li id='qty.sym.expr.algos-4.2.2'><div class='marginalizedparent' style='left:-36mm'><a class='marginalized' href='#qty.sym.expr.algos-4.2.2'>(4.2.2)</a></div><span class='texttt'>EF<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >den</i></span></span> denotes <span class='texttt'><span class='texttt'><i >type-list</i></span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.sym.expr.algos-4.2.sentence-1'>.</a></li></ul></div></div></li></ul></div></div><div class='para' id='qty.sym.expr.algos-5'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1140'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-5.sentence-1' class='sentence'>The symbolic expression algorithms perform operations on symbolic constants<a class='hidden_link' href='#qty.sym.expr.algos-5.sentence-1'>.</a></div> <div id='qty.sym.expr.algos-5.sentence-2' class='sentence'>A symbolic constant is a type that is a model of <a href='#concept:SymbolicConstant' title='5.3.4.2&emsp;Concept SymbolicConstant&emsp;[qty.sym.expr.concepts]'><span id='conceptref:SymbolicConstant_'><span class='texttt'><i >SymbolicConstant</i></span></span></a><a class='hidden_link' href='#qty.sym.expr.algos-5.sentence-2'>.</a></div> <div id='qty.sym.expr.algos-example-1' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#qty.sym.expr.algos-example-1'>1</a></i>:&ensp;<div id='qty.sym.expr.algos-5.sentence-3' class='sentence'>The dimension <span class='texttt'>dim_<span class='shy'></span>length</span>, the quantity <span class='texttt'>time</span>, and the unit <span class='texttt'>one</span> are symbolic constants<a class='hidden_link' href='#qty.sym.expr.algos-5.sentence-3'>.</a></div> —&nbsp;<i>end example</i>]</div></div> <div id='qty.sym.expr.algos-5.sentence-4' class='sentence'>
The algorithms also support
powers with a symbolic constant base and a rational exponent,
products thereof, and
@@ -217,9 +217,9 @@ fractions thereof<a class='hidden_link' href='#qty.sym.expr.algos-5.sentence-4'>
<span class='keyword'>typename</span> OneType, <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span>, <span class='keyword'>typename</span><span class='anglebracket'>&gt;</span> <span class='keyword'>typename</span> Pred <span class='operator'>=</span> <span class='texttt'><i >type-less</i></span>, <span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</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> <span class='keyword'>auto</span> <span class='texttt'><i >expr-pow</i></span><span class='parenthesis'>(</span>T<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div></div></div></div><div class='para' id='qty.sym.expr.algos-6'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1174'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-6.sentence-1' class='sentence'><i >Mandates</i>: <ul class='itemize'><li id='qty.sym.expr.algos-6.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-6.1'>(6.1)</a></div><span class='texttt'>OneType</span> is the neutral element (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-01-19">IEC 60050, 102-01-19</a>) of the operation, and</li><li id='qty.sym.expr.algos-6.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-6.2'>(6.2)</a></div><span class='texttt'>Pred</span> is a <i >Cpp17BinaryTypeTrait</i> (<a href="https://wg21.link/meta.rqmts">N4971, [meta.rqmts]</a>)
</code></div></div></div></div></div></div><div class='para' id='qty.sym.expr.algos-6'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1174'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-6.sentence-1' class='sentence'><i >Mandates</i>: <ul class='itemize'><li id='qty.sym.expr.algos-6.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-6.1'>(6.1)</a></div><span class='texttt'>OneType</span> is the neutral element (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-01-19">IEC 60050, 102-01-19</a>) of the operation, and</li><li id='qty.sym.expr.algos-6.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-6.2'>(6.2)</a></div><span class='texttt'>Pred</span> is a <i >Cpp17BinaryTypeTrait</i> (<a href="https://wg21.link/meta.rqmts">N4971, [meta.rqmts]</a>)
with a base characteristic of <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>bool_<span class='shy'></span>constant<span class='anglebracket'>&lt;</span>B<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.sym.expr.algos-6.sentence-1'>.</a> <div class='texpara'><div id='qty.sym.expr.algos-6.2.sentence-2' class='sentence'><span class='texttt'>Pred<span class='anglebracket'>&lt;</span>T, U<span class='anglebracket'>&gt;</span></span> implements a total order for types;
<span class='texttt'>B</span> is <span class='texttt'><span class='literal'>true</span></span> if <span class='texttt'>T</span> is ordered before <span class='texttt'>U</span>, and <span class='texttt'><span class='literal'>false</span></span> otherwise<a class='hidden_link' href='#qty.sym.expr.algos-6.2.sentence-2'>.</a></div></div></li></ul></div></div></div></div><div class='para' id='qty.sym.expr.algos-7'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1186'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-7.sentence-1' class='sentence'><i >Effects</i>: </div></div></div></div><div class='para' id='qty.sym.expr.algos-8'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1188'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-8.sentence-1' class='sentence'>First, inputs to the operations are obtained from the types of the function parameters<a class='hidden_link' href='#qty.sym.expr.algos-8.sentence-1'>.</a></div> <div id='qty.sym.expr.algos-8.sentence-2' class='sentence'>If the type of a function parameter is:
<span class='texttt'>B</span> is <span class='texttt'><span class='literal'>true</span></span> if <span class='texttt'>T</span> is ordered before <span class='texttt'>U</span>, and <span class='texttt'><span class='literal'>false</span></span> otherwise<a class='hidden_link' href='#qty.sym.expr.algos-6.2.sentence-2'>.</a></div></div></li></ul></div></div></div></div><div class='para' id='qty.sym.expr.algos-7'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1186'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-7.sentence-1' class='sentence'><i >Effects</i>: </div></div></div></div><div class='para' id='qty.sym.expr.algos-8'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1188'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-8.sentence-1' class='sentence'>First, inputs to the operations are obtained from the types of the function parameters<a class='hidden_link' href='#qty.sym.expr.algos-8.sentence-1'>.</a></div> <div id='qty.sym.expr.algos-8.sentence-2' class='sentence'>If the type of a function parameter is:
<ul class='itemize'><li id='qty.sym.expr.algos-8.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-8.1'>(8.1)</a></div><div class='texpara'><div id='qty.sym.expr.algos-8.1.sentence-1' class='sentence'>A specialization of <span class='texttt'>To</span>,
then its input is the product of its template arguments, and
the following also apply<a class='hidden_link' href='#qty.sym.expr.algos-8.1.sentence-1'>.</a></div></div></li><li id='qty.sym.expr.algos-8.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-8.2'>(8.2)</a></div><div class='texpara'><div id='qty.sym.expr.algos-8.2.sentence-1' class='sentence'>A specialization of <span class='texttt'>per</span>,
@@ -233,25 +233,25 @@ the following also applies<a class='hidden_link' href='#qty.sym.expr.algos-8.3.s
styled in diagnostics like
<span class='texttt'>derived_<span class='shy'></span>unit<span class='anglebracket'>&lt;</span>si<span class='operator'>&#x200b;::&#x200b;</span>kilo_<span class='shy'></span><span class='anglebracket'>&lt;</span>si<span class='operator'>&#x200b;::&#x200b;</span>metre<span class='anglebracket'>&gt;</span>, per<span class='anglebracket'>&lt;</span>power<span class='anglebracket'>&lt;</span>non_<span class='shy'></span>si<span class='operator'>&#x200b;::&#x200b;</span>hour, <span class='literal'>2</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span></span>,
<ul class='itemize'><li id='qty.sym.expr.algos-8.5'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-8.5'>(8.5)</a></div>to <span class='math'><span class='texttt'><span class='keyword'>decltype</span><span class='parenthesis'>(</span>km<span class='parenthesis'>)</span></span> &times;<span class='texttt'>per<span class='anglebracket'>&lt;</span>power<span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>h<span class='parenthesis'>)</span>, <span class='literal'>2</span><span class='anglebracket'>&gt;</span></span></span> (product of <span class='texttt'>To</span>'s arguments),</li><li id='qty.sym.expr.algos-8.6'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-8.6'>(8.6)</a></div>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.519em; padding-bottom: 0.519em;"><span class='keyword'>decltype</span><span class='parenthesis'>(</span>km<span class='parenthesis'>)</span></span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">×</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></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 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" style="padding-top: 0.519em; padding-bottom: 0.225em;"><span class="mjx-charbox MJXc-TeX-type-R" style="padding-bottom: 0.233em; margin-right: 0.275em;">power<span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>h<span class='parenthesis'>)</span>, </span><span class="mjx-charbox MJXc-TeX-type-R" style="padding-bottom: 0.233em;"><span class='literal'>2</span><span class='anglebracket'>&gt;</span></span></span></span></span></span></span></span></span> (product of inverse of <span class='texttt'>per</span>'s arguments),</li><li id='qty.sym.expr.algos-8.7'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-8.7'>(8.7)</a></div>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.519em; padding-bottom: 0.519em;"><span class='keyword'>decltype</span><span class='parenthesis'>(</span>km<span class='parenthesis'>)</span></span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">×</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></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 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-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.519em; padding-bottom: 0.519em;"><span class='keyword'>decltype</span><span class='parenthesis'>(</span>h<span class='parenthesis'>)</span></span></span></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.631em; 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;">2</span></span></span></span></span></span></span> (<span class='texttt'>power</span>s as powers),</li><li id='qty.sym.expr.algos-8.8'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-8.8'>(8.8)</a></div>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-main-R" style="padding-top: 0.151em; padding-bottom: 0.372em;">a</span></span></span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">×</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bLine truncated
in the mathematical domain<a class='hidden_link' href='#qty.sym.expr.algos-8.sentence-3'>.</a></li></ul></div> —&nbsp;<i>end example</i>]</div></div></div></div></div><div class='para' id='qty.sym.expr.algos-9'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1227'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-9.sentence-1' class='sentence'>Then, the operation takes place:
<ul class='itemize'><li id='qty.sym.expr.algos-9.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-9.1'>(9.1)</a></div><span class='texttt'><i >expr-multiply</i></span> multiplies its inputs,</li><li id='qty.sym.expr.algos-9.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-9.2'>(9.2)</a></div><span class='texttt'><i >expr-divide</i></span> divides the input of its first parameter by the input of its second parameter,</li><li id='qty.sym.expr.algos-9.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-9.3'>(9.3)</a></div><span class='texttt'><i >expr-invert</i></span> divides <span class='math'>1</span> by its input, and</li><li id='qty.sym.expr.algos-9.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-9.4'>(9.4)</a></div><span class='texttt'><i >expr-pow</i></span> raises its input to the <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;">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><a class='hidden_link' href='#qty.sym.expr.algos-9.sentence-1'>.</a></li></ul></div></div></div></div><div class='para' id='qty.sym.expr.algos-10'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1240'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-10.sentence-1' class='sentence'>Finally, let <span class='math'><span class='mathalpha'>r</span></span> be the result of the operation simplified as follows:
<ul class='itemize'><li id='qty.sym.expr.algos-10.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-10.1'>(10.1)</a></div><div class='texpara'><div id='qty.sym.expr.algos-10.1.sentence-1' class='sentence'>All terms are part of the same fraction (if any)<a class='hidden_link' href='#qty.sym.expr.algos-10.1.sentence-1'>.</a></div></div></li><li id='qty.sym.expr.algos-10.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-10.2'>(10.2)</a></div><div class='texpara'><div id='qty.sym.expr.algos-10.2.sentence-1' class='sentence'>There is at most a single term with a given symbolic constant<a class='hidden_link' href='#qty.sym.expr.algos-10.2.sentence-1'>.</a></div></div></li><li id='qty.sym.expr.algos-10.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-10.3'>(10.3)</a></div><div class='texpara'><div id='qty.sym.expr.algos-10.3.sentence-1' class='sentence'>There are no negative exponents<a class='hidden_link' href='#qty.sym.expr.algos-10.3.sentence-1'>.</a></div></div></li><li id='qty.sym.expr.algos-10.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-10.4'>(10.4)</a></div><div class='texpara'><div id='qty.sym.expr.algos-10.4.sentence-1' class='sentence'><span class='math'>1</span> is only present as <span class='math'><span class='mathalpha'>r</span></span> and as a numerator with a denominator not equal to <span class='math'>1</span><a class='hidden_link' href='#qty.sym.expr.algos-10.4.sentence-1'>.</a></div></div></li></ul></div> <div id='qty.sym.expr.algos-example-3' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#qty.sym.expr.algos-example-3'>3</a></i>:&ensp;<div id='qty.sym.expr.algos-10.sentence-2' class='sentence'>Item by item: <br/></div> <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">×</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></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 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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.006em;">y</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">×</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></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 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-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</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-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> <br/> <div id='qty.sym.expr.algos-10.sentence-3' class='sentence'><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.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</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-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.006em;">y</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.513em; padding-left: 0Line truncated
in the mathematical domain<a class='hidden_link' href='#qty.sym.expr.algos-8.sentence-3'>.</a></li></ul></div> —&nbsp;<i>end example</i>]</div></div></div></div></div><div class='para' id='qty.sym.expr.algos-9'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1227'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-9.sentence-1' class='sentence'>Then, the operation takes place:
<ul class='itemize'><li id='qty.sym.expr.algos-9.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-9.1'>(9.1)</a></div><span class='texttt'><i >expr-multiply</i></span> multiplies its inputs,</li><li id='qty.sym.expr.algos-9.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-9.2'>(9.2)</a></div><span class='texttt'><i >expr-divide</i></span> divides the input of its first parameter by the input of its second parameter,</li><li id='qty.sym.expr.algos-9.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-9.3'>(9.3)</a></div><span class='texttt'><i >expr-invert</i></span> divides <span class='math'>1</span> by its input, and</li><li id='qty.sym.expr.algos-9.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-9.4'>(9.4)</a></div><span class='texttt'><i >expr-pow</i></span> raises its input to the <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;">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><a class='hidden_link' href='#qty.sym.expr.algos-9.sentence-1'>.</a></li></ul></div></div></div></div><div class='para' id='qty.sym.expr.algos-10'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1240'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-10.sentence-1' class='sentence'>Finally, let <span class='math'><span class='mathalpha'>r</span></span> be the result of the operation simplified as follows:
<ul class='itemize'><li id='qty.sym.expr.algos-10.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-10.1'>(10.1)</a></div><div class='texpara'><div id='qty.sym.expr.algos-10.1.sentence-1' class='sentence'>All terms are part of the same fraction (if any)<a class='hidden_link' href='#qty.sym.expr.algos-10.1.sentence-1'>.</a></div></div></li><li id='qty.sym.expr.algos-10.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-10.2'>(10.2)</a></div><div class='texpara'><div id='qty.sym.expr.algos-10.2.sentence-1' class='sentence'>There is at most a single term with a given symbolic constant<a class='hidden_link' href='#qty.sym.expr.algos-10.2.sentence-1'>.</a></div></div></li><li id='qty.sym.expr.algos-10.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-10.3'>(10.3)</a></div><div class='texpara'><div id='qty.sym.expr.algos-10.3.sentence-1' class='sentence'>There are no negative exponents<a class='hidden_link' href='#qty.sym.expr.algos-10.3.sentence-1'>.</a></div></div></li><li id='qty.sym.expr.algos-10.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-10.4'>(10.4)</a></div><div class='texpara'><div id='qty.sym.expr.algos-10.4.sentence-1' class='sentence'><span class='math'>1</span> is only present as <span class='math'><span class='mathalpha'>r</span></span> and as a numerator with a denominator not equal to <span class='math'>1</span><a class='hidden_link' href='#qty.sym.expr.algos-10.4.sentence-1'>.</a></div></div></li></ul></div> <div id='qty.sym.expr.algos-example-3' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#qty.sym.expr.algos-example-3'>3</a></i>:&ensp;<div id='qty.sym.expr.algos-10.sentence-2' class='sentence'>Item by item: <br/></div> <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">×</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></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 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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.006em;">y</span></span><span class="mjx-mo MJXc-space2"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.225em; padding-bottom: 0.298em;">×</span></span><span class="mjx-texatom MJXc-space2"><span class="mjx-mrow"></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 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-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</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-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> <br/> <div id='qty.sym.expr.algos-10.sentence-3' class='sentence'><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.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mi MJXc-space3"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</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-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.519em; padding-right: 0.006em;">y</span></span><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.513em; padding-left: 0Line truncated
<ul class='itemize'><li id='qty.sym.expr.algos-11.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-11.1'>(11.1)</a></div><div class='texpara'><div id='qty.sym.expr.algos-11.1.sentence-1' class='sentence'>If <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">r</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;">1</span></span></span></span></span>, returns <span class='texttt'>OneType<span class='curlybracket'>{</span><span class='curlybracket'>}</span></span><a class='hidden_link' href='#qty.sym.expr.algos-11.1.sentence-1'>.</a></div></div></li><li id='qty.sym.expr.algos-11.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-11.2'>(11.2)</a></div><div class='texpara'><div id='qty.sym.expr.algos-11.2.sentence-1' class='sentence'>Otherwise, if <span class='math'><span class='mathalpha'>r</span></span> is a symbolic constant, returns <span class='math'><span class='mathalpha'>r</span></span><a class='hidden_link' href='#qty.sym.expr.algos-11.2.sentence-1'>.</a></div></div></li><li id='qty.sym.expr.algos-11.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-11.3'>(11.3)</a></div><div class='texpara'><div id='qty.sym.expr.algos-11.3.sentence-1' class='sentence'>Otherwise, first applies the following mappings to the terms of <span class='math'><span class='mathalpha'>r</span></span>:
<ul class='itemize'><li id='qty.sym.expr.algos-11.3.1'><div class='marginalizedparent' style='left:-48mm'><a class='marginalized' href='#qty.sym.expr.algos-11.3.1'>(11.3.1)</a></div><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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em; padding-right: 0.003em;">d</span></span></span></span></span></span></span></span></span> is mapped to <span class='texttt'>power<span class='anglebracket'>&lt;</span><span class='math'><span class='mathalpha'>x</span></span>, <span class='math'><span class='mathalpha'>n</span></span>, <span class='math'><span class='mathalpha'>d</span></span><span class='anglebracket'>&gt;</span></span>, and
<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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">x</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-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">n</span></span></span></span></span></span></span></span></span> is mapped to <span class='texttt'>power<span class='anglebracket'>&lt;</span><span class='math'><span class='mathalpha'>x</span></span>, <span class='math'><span class='mathalpha'>n</span></span><span class='anglebracket'>&gt;</span></span>, and</li><li id='qty.sym.expr.algos-11.3.2'><div class='marginalizedparent' style='left:-48mm'><a class='marginalized' href='#qty.sym.expr.algos-11.3.2'>(11.3.2)</a></div><span class='math'>1</span> is mapped to <span class='texttt'>OneType<span class='curlybracket'>{</span><span class='curlybracket'>}</span></span><a class='hidden_link' href='#qty.sym.expr.algos-11.3.sentence-1'>.</a></li></ul></div></div></li><li id='qty.sym.expr.algos-11.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-11.4'>(11.4)</a></div><div class='texpara'><div id='qty.sym.expr.algos-11.4.sentence-1' class='sentence'>Then, a denominator <span class='math'><span class='mathalpha'>x</span></span> of <span class='math'><span class='mathalpha'>r</span></span> (if any) is mapped to <span class='texttt'>per<span class='anglebracket'>&lt;</span><span class='math'><span class='mathalpha'>x</span></span><span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.sym.expr.algos-11.4.sentence-1'>.</a></div></div></li><li id='qty.sym.expr.algos-11.5'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-11.5'>(11.5)</a></div><div class='texpara'><div id='qty.sym.expr.algos-11.5.sentence-1' class='sentence'>Then, sorts <span class='math'><span class='mathalpha'>r</span></span> without <span class='texttt'>per</span> (if any) and
the template arguments of <span class='texttt'>per</span> (if any)
according to <span class='texttt'>Pred</span><a class='hidden_link' href='#qty.sym.expr.algos-11.5.sentence-1'>.</a></div></div></li><li id='qty.sym.expr.algos-11.6'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-11.6'>(11.6)</a></div><div class='texpara'><div id='qty.sym.expr.algos-11.6.sentence-1' class='sentence'>Finally, returns <span class='texttt'>To<span class='anglebracket'>&lt;</span><span class='math'><span class='mathalpha'>r</span></span><span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span></span>, where <span class='texttt'>per</span> (if any) is the last argument<a class='hidden_link' href='#qty.sym.expr.algos-11.6.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='para' id='qty.sym.expr.algos-12'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1288'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-12.sentence-1' class='sentence'><i >Remarks</i>: A valid template argument list for <span class='texttt'>To</span> and <span class='texttt'>per</span>
according to <span class='texttt'>Pred</span><a class='hidden_link' href='#qty.sym.expr.algos-11.5.sentence-1'>.</a></div></div></li><li id='qty.sym.expr.algos-11.6'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-11.6'>(11.6)</a></div><div class='texpara'><div id='qty.sym.expr.algos-11.6.sentence-1' class='sentence'>Finally, returns <span class='texttt'>To<span class='anglebracket'>&lt;</span><span class='math'><span class='mathalpha'>r</span></span><span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span></span>, where <span class='texttt'>per</span> (if any) is the last argument<a class='hidden_link' href='#qty.sym.expr.algos-11.6.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='para' id='qty.sym.expr.algos-12'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1288'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-12.sentence-1' class='sentence'><i >Remarks</i>: A valid template argument list for <span class='texttt'>To</span> and <span class='texttt'>per</span>
is formed by interspersing commas between each mapped term<a class='hidden_link' href='#qty.sym.expr.algos-12.sentence-1'>.</a></div> <div id='qty.sym.expr.algos-12.sentence-2' class='sentence'>If a mapping to <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>intmax_<span class='shy'></span>t</span> is not representable,
the program is ill-formed<a class='hidden_link' href='#qty.sym.expr.algos-12.sentence-2'>.</a></div></div></div></div><div class='para' id='qty.sym.expr.algos-13'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-13'>13</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1296'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-13.sentence-1' class='sentence'><span class='texttt'><i >expr-map</i></span> maps the contents of one symbolic expression to another resulting in a different type list<a class='hidden_link' href='#qty.sym.expr.algos-13.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:expr-map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:expr-map'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span><span class='anglebracket'>&gt;</span> <span class='keyword'>typename</span> Proj, <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span> <span class='keyword'>typename</span> To, <span class='keyword'>typename</span> OneType,
the program is ill-formed<a class='hidden_link' href='#qty.sym.expr.algos-12.sentence-2'>.</a></div></div></div></div><div class='para' id='qty.sym.expr.algos-13'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-13'>13</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1296'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-13.sentence-1' class='sentence'><span class='texttt'><i >expr-map</i></span> maps the contents of one symbolic expression to another resulting in a different type list<a class='hidden_link' href='#qty.sym.expr.algos-13.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:expr-map'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:expr-map'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span><span class='anglebracket'>&gt;</span> <span class='keyword'>typename</span> Proj, <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span> <span class='keyword'>typename</span> To, <span class='keyword'>typename</span> OneType,
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span>, <span class='keyword'>typename</span><span class='anglebracket'>&gt;</span> <span class='keyword'>typename</span> Pred <span class='operator'>=</span> <span class='texttt'><i >type-less</i></span>, <span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >expr-map</i></span><span class='parenthesis'>(</span>T<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div><div class='para' id='qty.sym.expr.algos-14'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-14'>14</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1307'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-14.sentence-1' class='sentence'>Let
</code></div></div></div><div class='para' id='qty.sym.expr.algos-14'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-14'>14</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1307'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-14.sentence-1' class='sentence'>Let
<ul class='itemize'><li id='qty.sym.expr.algos-14.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-14.1'>(14.1)</a></div><span class='texttt'><span class='texttt'><i >expr-type-map</i></span><span class='anglebracket'>&lt;</span>U<span class='anglebracket'>&gt;</span></span> be
<span class='texttt'>power<span class='anglebracket'>&lt;</span>Proj<span class='anglebracket'>&lt;</span>F<span class='anglebracket'>&gt;</span>, Ints<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span></span> if <span class='texttt'>U</span> is of the form <span class='texttt'>power<span class='anglebracket'>&lt;</span>F, Ints<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span></span>, and
<span class='texttt'>Proj<span class='anglebracket'>&lt;</span>U<span class='anglebracket'>&gt;</span></span> otherwise,</li><li id='qty.sym.expr.algos-14.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-14.2'>(14.2)</a></div><span class='texttt'><span class='texttt'><i >map-power</i></span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span> be
<span class='texttt'>pow<span class='anglebracket'>&lt;</span>Ints<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>F<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span></span> if <span class='texttt'><span class='keyword'>decltype</span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span> is of the form <span class='texttt'>power<span class='anglebracket'>&lt;</span>F, Ints<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span></span>, and
<span class='texttt'>u</span> otherwise, and</li><li id='qty.sym.expr.algos-14.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-14.3'>(14.3)</a></div><span class='texttt'>Nums</span> and <span class='texttt'>Dens</span>
be packs denoting the template arguments of
<span class='texttt'>T<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >nums</i></span></span> and <span class='texttt'>T<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >dens</i></span></span>, respectively<a class='hidden_link' href='#qty.sym.expr.algos-14.sentence-1'>.</a></li></ul></div></div></div></div><div class='para' id='qty.sym.expr.algos-15'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-15'>15</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units47a82f466ceb0260363bccd02316efdb5db830ff/source/quantities.tex#L1324'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-15.sentence-1' class='sentence'><i >Returns</i>: <span class='codeblock'><span class='parenthesis'>(</span>OneType<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> <span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> <span class='operator'>*</span> <i >map-power</i><span class='parenthesis'>(</span><i >expr-type-map</i><span class='anglebracket'>&lt;</span>Nums<span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>/</span>
<span class='texttt'>T<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >nums</i></span></span> and <span class='texttt'>T<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >dens</i></span></span>, respectively<a class='hidden_link' href='#qty.sym.expr.algos-14.sentence-1'>.</a></li></ul></div></div></div></div><div class='para' id='qty.sym.expr.algos-15'><div class='marginalizedparent'><a class='marginalized' href='#qty.sym.expr.algos-15'>15</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1324'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-15.sentence-1' class='sentence'><i >Returns</i>: <span class='codeblock'><span class='parenthesis'>(</span>OneType<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> <span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> <span class='operator'>*</span> <i >map-power</i><span class='parenthesis'>(</span><i >expr-type-map</i><span class='anglebracket'>&lt;</span>Nums<span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>/</span>
<span class='parenthesis'>(</span>OneType<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> <span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> <span class='operator'>*</span> <i >map-power</i><span class='parenthesis'>(</span><i >expr-type-map</i><span class='anglebracket'>&lt;</span>Dens<span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
</span></div></div></div></div></div></div></div></body></html>