Files
mp-units/HEAD/api_reference/gen/full.html
T

3499 lines
1.2 MiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html lang='en'><head><title>14882</title><meta charset='UTF-8'/><link rel='stylesheet' type='text/css' href='14882.css'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Serif'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Sans'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Sans+Mono'/><link rel='icon' href='icon.png'/><link rel='stylesheet' type='text/css' href='expanded.css' title='Normal'/><link rel='alternate stylesheet' type='text/css' href='colored.css' title='Notes and examples colored'/><link rel='alternate stylesheet' type='text/css' href='normative-only.css' title='Notes and examples hidden'/></head><body><div class='wrapper'><div id='scope' class='section'><h1 ><a class='secnum' style='min-width:50pt'>1</a> Scope <a class='abbr_ref' href='index.html#scope'>[scope]</a></h1><div class='para'><div class='marginalizedparent'><a class='marginalized' href='scope.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/intro.tex#L6'>#</a></div><div class='texpara'><div id='scope-1.sentence-1' class='sentence'><a class='index' id=':scope'></a>This document describes the contents of the <a class='hidden_link' href='#def:mp-units_library' title='1&emsp;Scope&emsp;[scope]'><span id='def:mp-units_library'><i >mp-units library</i></span></a><a class='hidden_link' href='#scope-1.sentence-1'>.</a></div> </div></div></div><div id='refs' class='section'><h1 ><a class='secnum' style='min-width:50pt'>2</a> References <a class='abbr_ref' href='index.html#refs'>[refs]</a></h1><div class='para'><div class='marginalizedparent'><a class='marginalized' href='refs.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/intro.tex#L14'>#</a></div><div class='texpara'><div id='refs-1.sentence-1' class='sentence'><a class='index' id=':references'></a>The following documents are referred to in the text
in such a way that some or all of their content
constitutes requirements of this document<a class='hidden_link' href='#refs-1.sentence-1'>.</a></div> <div id='refs-1.sentence-2' class='sentence'>For dated references, only the edition cited applies<a class='hidden_link' href='#refs-1.sentence-2'>.</a></div> <div id='refs-1.sentence-3' class='sentence'>For undated references,
the latest edition of the referenced document
(including any amendments) applies<a class='hidden_link' href='#refs-1.sentence-3'>.</a></div> <ul class='itemize'><li id='refs-1.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#refs-1.1'>(1.1)</a></div><div class='texpara'><div id='refs-1.1.sentence-1' class='sentence'>IEC 60050-102:2007/AMD3:2021,
<i >Amendment 3 — International Electrotechnical Vocabulary (IEV) —
Part 102: Mathematics — General concepts and linear algebra</i></div></div></li><li id='refs-1.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#refs-1.2'>(1.2)</a></div><div class='texpara'><div id='refs-1.2.sentence-1' class='sentence'>IEC 60050-112:2010/AMD2:2020,
<i >Amendment 2 — International Electrotechnical Vocabulary (IEV) —
Part 112: Quantities and units</i></div></div></li><li id='refs-1.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#refs-1.3'>(1.3)</a></div><div class='texpara'><div id='refs-1.3.sentence-1' class='sentence'>ISO 80000 (all parts), <i >Quantities and units</i></div></div></li><li id='refs-1.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#refs-1.4'>(1.4)</a></div><div class='texpara'><div id='refs-1.4.sentence-1' class='sentence'>The C++ Standards Committee<a class='hidden_link' href='#refs-1.4.sentence-1'>.</a></div> <div id='refs-1.4.sentence-2' class='sentence'>N4971: <i >Working Draft, Standard for Programming Language C++</i><a class='hidden_link' href='#refs-1.4.sentence-2'>.</a></div> <div id='refs-1.4.sentence-3' class='sentence'>Edited by Thomas Köppe<a class='hidden_link' href='#refs-1.4.sentence-3'>.</a></div> <div id='refs-1.4.sentence-4' class='sentence'>Available from: <a href='https://wg21.link/N4971'>https://wg21.link/N4971</a></div></div></li><li id='refs-1.5'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#refs-1.5'>(1.5)</a></div><div class='texpara'><div id='refs-1.5.sentence-1' class='sentence'>The C++ Standards Committee<a class='hidden_link' href='#refs-1.5.sentence-1'>.</a></div> <div id='refs-1.5.sentence-2' class='sentence'>P3094R5: <i ><span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>basic_<span class='shy'></span>fixed_<span class='shy'></span>string</span></i><a class='hidden_link' href='#refs-1.5.sentence-2'>.</a></div> <div id='refs-1.5.sentence-3' class='sentence'>Edited by Mateusz Pusz<a class='hidden_link' href='#refs-1.5.sentence-3'>.</a></div> <div id='refs-1.5.sentence-4' class='sentence'>Available from: <a href='https://wg21.link/P3094R5'>https://wg21.link/P3094R5</a></div></div></li><li id='refs-1.6'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#refs-1.6'>(1.6)</a></div><div class='texpara'><div id='refs-1.6.sentence-1' class='sentence'>The C++ Standards Committee<a class='hidden_link' href='#refs-1.6.sentence-1'>.</a></div> <div id='refs-1.6.sentence-2' class='sentence'>SD-8: <i >Standard Library Compatibility</i><a class='hidden_link' href='#refs-1.6.sentence-2'>.</a></div> <div id='refs-1.6.sentence-3' class='sentence'>Edited by Bryce Lelbach<a class='hidden_link' href='#refs-1.6.sentence-3'>.</a></div> <div id='refs-1.6.sentence-4' class='sentence'>Available from: <a href='https://wg21.link/SD8'>https://wg21.link/SD8</a></div></div></li></ul> </div></div></div><div id='defs' class='section'><h1 ><a class='secnum' style='min-width:50pt'>3</a> Terms and definitions <a class='abbr_ref' href='index.html#defs'>[defs]</a></h1><div class='para'><div class='marginalizedparent'><a class='marginalized' href='defs.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/intro.tex#L55'>#</a></div><div class='texpara'><div id='defs-1.sentence-1' class='sentence'><a class='index' id=':definitions'></a>For the purposes of this document,
the terms and definitions given in
IEC 60050-102:2007/AMD3:2021,
IEC 60050-112:2010/AMD2:2020,
ISO 80000-2:2019,
and
N4971,
and the following apply<a class='hidden_link' href='#defs-1.sentence-1'>.</a></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='defs.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/intro.tex#L66'>#</a></div><div class='texpara'><div id='defs-2.sentence-1' class='sentence'>ISO and IEC maintain terminology databases
for use in standardization
at the following addresses:
<ul class='itemize'><li id='defs-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#defs-2.1'>(2.1)</a></div>ISO Online browsing platform: available at <a href='https://www.iso.org/obp'>https://www.iso.org/obp</a></li><li id='defs-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#defs-2.2'>(2.2)</a></div>IEC Electropedia: available at <a href='http://www.electropedia.org'>http://www.electropedia.org</a></li></ul>
</div></div></div></div><div id='spec' class='section'><h1 ><a class='secnum' style='min-width:50pt'>4</a> Specification <a class='abbr_ref' href='index.html#spec'>[spec]</a></h1><div id='spec.ext' class='section'><h2 ><a class='secnum' style='min-width:65pt'>4.1</a> External <a class='abbr_ref' href='spec.ext.html'>[spec.ext]</a></h2><div class='para'><div class='marginalizedparent'><a class='marginalized' href='spec.ext.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/intro.tex#L81'>#</a></div><div class='texpara'><div id='spec.ext-1.sentence-1' class='sentence'>The specification of the mp-units library subsumes
<a href="https://wg21.link/description">N4971, [description]</a>, <a href="https://wg21.link/requirements">N4971, [requirements]</a>, <a href="https://wg21.link/concepts.equality">N4971, [concepts.equality]</a>, and SD-8,
all assumingly amended for the context of this library<a class='hidden_link' href='#spec.ext-1.sentence-1'>.</a></div> <div id='spec.ext-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#spec.ext-note-1'>1</a></i>:&ensp;<div id='spec.ext-1.sentence-2' class='sentence'>This means that, non exhaustively,
<ul class='itemize'><li id='spec.ext-1.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#spec.ext-1.1'>(1.1)</a></div><span class='texttt'><span class='operator'>&#x200b;::&#x200b;</span>mp_<span class='shy'></span>units2</span> is a reserved namespace, and</li><li id='spec.ext-1.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#spec.ext-1.2'>(1.2)</a></div><span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>vector<span class='anglebracket'>&lt;</span>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span><i >type</i><span class='anglebracket'>&gt;</span></span>
is a program-defined specialization and a library-defined specialization
from the point of view of the C++ standard library and the mp-units library, respectively<a class='hidden_link' href='#spec.ext-1.sentence-2'>.</a></li></ul></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='spec.ext.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/intro.tex#L96'>#</a></div><div class='texpara'><div id='spec.ext-2.sentence-1' class='sentence'>The mp-units library is not part of the C++ implementation<a class='hidden_link' href='#spec.ext-2.sentence-1'>.</a></div></div></div></div><div id='spec.cats' class='section'><h2 ><a class='secnum' style='min-width:65pt'>4.2</a> Categories <a class='abbr_ref' href='spec.cats.html'>[spec.cats]</a></h2><div class='para'><div class='marginalizedparent'><a class='marginalized' href='spec.cats.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/intro.tex#L101'>#</a></div><div class='texpara'><div id='spec.cats-1.sentence-1' class='sentence'>Detailed specifications for each of the components in the library are in
<a href='#quantities' title='5&emsp;Quantities and units library'>[quantities]</a><a href='#quantities' title='5&emsp;Quantities and units library'>[quantities]</a>,
as shown in Table <a href='#tab:lib.cats' title='Table 1: Library categories'>1</a><a class='hidden_link' href='#spec.cats-1.sentence-1'>.</a></div></div><div class='texpara'><div class='numberedTable' id='tab:lib.cats'>Table <a href='#tab:lib.cats'>1</a>: Library categories&emsp;<a href='./tab:lib.cats.html'>[tab:lib.cats]</a><br><table ><tr id='tab:lib.cats-row-1' class='rowsep'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:lib.cats-row-1'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:lib.cats-row-1-column-1-sentence-1' class='sentence'><b>Clause</b></div></div></td><td class='left'><div class='texpara'><div id='tab:lib.cats-row-1-column-2-sentence-1' class='sentence'><b>Category</b></div></div></td></tr><tr id='tab:lib.cats-row-2' class='capsep'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:lib.cats-row-2'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:lib.cats-row-2-column-1-sentence-1' class='sentence'><a href='#quantities' title='5&emsp;Quantities and units library'>[quantities]</a></div></div></td><td class='left'><div class='texpara'><div id='tab:lib.cats-row-2-column-2-sentence-1' class='sentence'>Quantities library</div></div></td></tr></table></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='spec.cats.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/intro.tex#L113'>#</a></div><div class='texpara'><div id='spec.cats-2.sentence-1' class='sentence'>The quantities library (<a href='#quantities' title='5&emsp;Quantities and units library'>[quantities]</a>)
describes components for dealing with quantities<a class='hidden_link' href='#spec.cats-2.sentence-1'>.</a></div></div></div></div><div id='spec.mods' class='section'><h2 ><a class='secnum' style='min-width:65pt'>4.3</a> Modules <a class='abbr_ref' href='spec.mods.html'>[spec.mods]</a></h2><div class='para'><div class='marginalizedparent'><a class='marginalized' href='spec.mods.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/intro.tex#L119'>#</a></div><div class='texpara'><div id='spec.mods-1.sentence-1' class='sentence'>The mp-units library provides the
<a class='hidden_link' href='#def:module,mp-units' title='4.3&emsp;Modules&emsp;[spec.mods]'><span id='def:module,mp-units'><i >mp-units modules</i></span></a>,
shown in Table <a href='#tab:modules' title='Table 2: mp-units modules'>2</a><a class='hidden_link' href='#spec.mods-1.sentence-1'>.</a></div></div><div class='texpara'><div class='numberedTable' id='tab:modules'>Table <a href='#tab:modules'>2</a>: mp-units modules&emsp;<a href='./tab:modules.html'>[tab:modules]</a><br><table ><tr id='tab:modules-row-1'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:modules-row-1'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:modules-row-1-column-1-sentence-1' class='sentence'><span class='texttt'>mp_<span class='shy'></span>units</span></div></div></td><td class='left'><div class='texpara'><div id='tab:modules-row-1-column-2-sentence-1' class='sentence'><span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>.</span>core</span></div></div></td><td class='left'><div class='texpara'><div id='tab:modules-row-1-column-3-sentence-1' class='sentence'><span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>.</span>systems</span></div></div></td></tr></table></div></div></div></div><div id='spec.reqs' class='section'><h2 ><a class='secnum' style='min-width:65pt'>4.4</a> Library-wide requirements <a class='abbr_ref' href='spec.reqs.html'>[spec.reqs]</a></h2><div id='spec.res.names' class='section'><h3 ><a class='secnum' style='min-width:80pt'>4.4.1</a> Reserved names <a class='abbr_ref' href='spec.res.names.html'>[spec.res.names]</a></h3><div class='para'><div class='marginalizedparent'><a class='marginalized' href='spec.res.names.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/intro.tex#L137'>#</a></div><div class='texpara'><div id='spec.res.names-1.sentence-1' class='sentence'>The mp-units library reserves macro names that start with
<span class='texttt'>MP_<span class='shy'></span>UNITS<span class='textsf'><i >digit-sequence</i></span><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"></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mstyle" style="font-size: 113.1%; color: black;"><span class="mjx-mrow" style="font-size: 88.4%;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span></span></span></span>_<span class='shy'></span></span><a class='hidden_link' href='#spec.res.names-1.sentence-1'>.</a></div></div></div></div></div></div><div id='quantities' class='section'><h1 ><a class='secnum' style='min-width:50pt'>5</a> Quantities and units library <a class='abbr_ref' href='index.html#quantities'>[quantities]</a></h1><div id='quantities.summary' class='section'><h2 ><a class='secnum' style='min-width:65pt'>5.1</a> Summary <a class='abbr_ref' href='quantities.summary.html'>[quantities.summary]</a></h2><div class='para'><div class='marginalizedparent'><a class='marginalized' href='quantities.summary.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6'>#</a></div><div class='texpara'><div id='quantities.summary-1.sentence-1' class='sentence'>This Clause describes components for dealing with quantities and units,
as summarized in Table <a href='#tab:quantities.summary' title='Table 3: Quantities and units library summary'>3</a><a class='hidden_link' href='#quantities.summary-1.sentence-1'>.</a></div></div><div class='texpara'><div class='numberedTable' id='tab:quantities.summary'>Table <a href='#tab:quantities.summary'>3</a>: Quantities and units library summary&emsp;<a href='./tab:quantities.summary.html'>[tab:quantities.summary]</a><br><table ><tr id='tab:quantities.summary-row-1' class='rowsep'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:quantities.summary-row-1'>🔗</a></div></td><td class='empty left'></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-1-column-2-sentence-1' class='sentence'><b>Subclause</b></div></div></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-1-column-3-sentence-1' class='sentence'><b>Module</b></div></div></td></tr><tr id='tab:quantities.summary-row-2' class='capsep'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:quantities.summary-row-2'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-2-column-1-sentence-1' class='sentence'><a href='#qty.utils' title='5.3&emsp;Utilities'>[qty.<span class='shy'></span>utils]</a></div></div></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-2-column-2-sentence-1' class='sentence'>Utilities</div></div></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-2-column-3-sentence-1' class='sentence'><span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>.</span>core</span></div></div></td></tr><tr id='tab:quantities.summary-row-3'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:quantities.summary-row-3'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-3-column-1-sentence-1' class='sentence'><a href='#qty.ref' title='5.4&emsp;Reference'>[qty.<span class='shy'></span>ref]</a></div></div></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-3-column-2-sentence-1' class='sentence'>Reference</div></div></td><td class='empty left'></td></tr><tr id='tab:quantities.summary-row-4'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:quantities.summary-row-4'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-4-column-1-sentence-1' class='sentence'><a href='#qty.rep' title='5.5&emsp;Representation'>[qty.<span class='shy'></span>rep]</a></div></div></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-4-column-2-sentence-1' class='sentence'>Representation</div></div></td><td class='empty left'></td></tr><tr id='tab:quantities.summary-row-5'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:quantities.summary-row-5'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-5-column-1-sentence-1' class='sentence'><a href='#qty' title='5.6&emsp;Quantity'>[qty]</a></div></div></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-5-column-2-sentence-1' class='sentence'>Quantity</div></div></td><td class='empty left'></td></tr><tr id='tab:quantities.summary-row-6'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:quantities.summary-row-6'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-6-column-1-sentence-1' class='sentence'><a href='#qty.pt' title='5.7&emsp;Quantity point'>[qty.<span class='shy'></span>pt]</a></div></div></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-6-column-2-sentence-1' class='sentence'>Quantity point</div></div></td><td class='empty left'></td></tr><tr id='tab:quantities.summary-row-7' class='rowsep'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:quantities.summary-row-7'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-7-column-1-sentence-1' class='sentence'><a href='#qty.systems' title='5.8&emsp;Systems'>[qty.<span class='shy'></span>systems]</a></div></div></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-7-column-2-sentence-1' class='sentence'>Systems</div></div></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-7-column-3-sentence-1' class='sentence'><span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>.</span>systems</span></div></div></td></tr><tr id='tab:quantities.summary-row-8'><td class='hidden'><div class='marginalizedparent'><a class='itemDeclLink' href='#tab:quantities.summary-row-8'>🔗</a></div></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-8-column-1-sentence-1' class='sentence'><a href='#qty.chrono' title='5.9&emsp;std&#x200b;::&#x200b;chrono interoperability'>[qty.<span class='shy'></span>chrono]</a></div></div></td><td class='left'><div class='texpara'><div id='tab:quantities.summary-row-8-column-2-sentence-1' class='sentence'><span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>chrono</span> interoperability</div></div></td><td class='empty left'></td></tr></table></div>
</div><div class='texpara'>[Editor's note:
Following the SG16 recommendation at <a href='https://lists.isocpp.org/sg16/2024/10/4490.php'>https://lists.isocpp.org/sg16/2024/10/4490.php</a>,
the <span class='textsf'><i >universal-character-name</i></span><i >s</i> should be replaced by their UTF-8 code points.
] </div></div></div><div id='mp.units.syns' class='section'><h2 ><a class='secnum' style='min-width:65pt'>5.2</a> mp-units module synopses <a class='abbr_ref' href='mp.units.syns.html'>[mp.units.syns]</a></h2><div id='mp.units.syn' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.2.1</a> Module <span class='texttt'>mp_<span class='shy'></span>units</span> synopsis <a class='abbr_ref' href='mp.units.syn.html'>[mp.units.syn]</a></h3><div class='texpara'><span id='module:mp_units'><div class='marginalizedparent'><a class='itemDeclLink' href='#module:mp_units'>🔗</a></div><span class='codeblock'><span class='keyword'>export</span> <span class='keyword'>module</span> mp_units;
<span class='keyword'>export</span> <span class='keyword'>import</span> mp_units<span class='operator'>.</span>core;
<span class='keyword'>export</span> <span class='keyword'>import</span> mp_units<span class='operator'>.</span>systems;
</span></span></div></div><div id='mp.units.core.syn' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.2.2</a> Module <span class='texttt'>mp_<span class='shy'></span>units.core</span> synopsis <a class='abbr_ref' href='mp.units.core.syn.html'>[mp.units.core.syn]</a></h3><div class='texpara'><span id='module:mp_units.core'><div class='marginalizedparent'><a class='itemDeclLink' href='#module:mp_units.core'>🔗</a></div><span class='codeblock'><span class='comment'>// mostly freestanding</span>
<span class='keyword'>export</span> <span class='keyword'>module</span> mp_units<span class='operator'>.</span>core;
<span class='keyword'>import</span> std;
<span class='keyword'>export</span> <span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='comment'>// <a href='#qty.utils' title='5.3&emsp;Utilities'>[qty.<span class='shy'></span>utils]</a>, utilities</span>
<span class='comment'>// <a href='#qty.sym.txt' title='5.3.3&emsp;Symbol text'>[qty.<span class='shy'></span>sym.<span class='shy'></span>txt]</a>, symbol text</span>
<span class='keyword'>enum</span> <span class='keyword'>class</span> <span id='lib:character_set'><a class='hidden_link' href='#lib:character_set' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>character_set</a></span> <span class='operator'>:</span> std<span class='operator'>::</span>int8_t <span class='curlybracket'>{</span> utf8, portable, default_character_set <span class='operator'>=</span> utf8 <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>
<span class='keyword'>class</span> symbol_text;
<span class='comment'>// <a href='#qty.sym.expr' title='5.3.4&emsp;Symbolic expressions'>[qty.<span class='shy'></span>sym.<span class='shy'></span>expr]</a>, symbolic expressions</span>
<span class='comment'>// <a href='#qty.sym.expr.types' title='5.3.4.3&emsp;Types'>[qty.<span class='shy'></span>sym.<span class='shy'></span>expr.<span class='shy'></span>types]</a>, types</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, <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> per;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> F, <span class='keyword'>int</span> Num, <span class='keyword'>int</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Den<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>struct</span> power;
<span class='comment'>// <a href='#qty.ref' title='5.4&emsp;Reference'>[qty.<span class='shy'></span>ref]</a>, reference</span>
<span class='comment'>// <a href='#qty.dim' title='5.4.2&emsp;Dimension'>[qty.<span class='shy'></span>dim]</a>, dimension</span>
<span class='comment'>// <a href='#qty.dim.concepts' title='5.4.2.2&emsp;Concepts'>[qty.<span class='shy'></span>dim.<span class='shy'></span>concepts]</a>, concepts</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> Dimension <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> D<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> DimensionOf <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// <a href='#qty.dim.types' title='5.4.2.3&emsp;Types'>[qty.<span class='shy'></span>dim.<span class='shy'></span>types]</a>, types</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> base_dimension;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:SymbolicConstant'></a><i >SymbolicConstant</i><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> derived_dimension;
<span class='keyword'>struct</span> dimension_one;
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> dimension_one <span id='lib:dimension_one'><a class='hidden_link' href='#lib:dimension_one' title='5.4.2.3&emsp;Types&emsp;[qty.dim.types]'>dimension_one</a></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='comment'>// <a href='#qty.dim.ops' title='5.4.2.4&emsp;Operations'>[qty.<span class='shy'></span>dim.<span class='shy'></span>ops]</a>, operations</span>
<span class='keyword'>consteval</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension'><span class='tcode_in_codeblock'>Dimension</span></span></a> <span class='keyword'>auto</span> inverse<span class='parenthesis'>(</span><a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension_'><span class='tcode_in_codeblock'>Dimension</span></span></a> <span class='keyword'>auto</span> d<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>intmax_t Num, std<span class='operator'>::</span>intmax_t Den <span class='operator'>=</span> <span class='literal'>1</span>, <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension__'><span class='tcode_in_codeblock'>Dimension</span></span></a> D<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> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension___'><span class='tcode_in_codeblock'>Dimension</span></span></a> <span class='keyword'>auto</span> pow<span class='parenthesis'>(</span>D d<span class='parenthesis'>)</span>;
<span class='keyword'>consteval</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension____'><span class='tcode_in_codeblock'>Dimension</span></span></a> <span class='keyword'>auto</span> sqrt<span class='parenthesis'>(</span><a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension_____'><span class='tcode_in_codeblock'>Dimension</span></span></a> <span class='keyword'>auto</span> d<span class='parenthesis'>)</span>;
<span class='keyword'>consteval</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension______'><span class='tcode_in_codeblock'>Dimension</span></span></a> <span class='keyword'>auto</span> cbrt<span class='parenthesis'>(</span><a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension_______'><span class='tcode_in_codeblock'>Dimension</span></span></a> <span class='keyword'>auto</span> d<span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#qty.dim.sym.fmt' title='5.4.2.5&emsp;Symbol formatting'>[qty.<span class='shy'></span>dim.<span class='shy'></span>sym.<span class='shy'></span>fmt]</a>, symbol formatting</span>
<span class='keyword'>struct</span> <span id='lib:dimension_symbol_formatting'><a class='hidden_link' href='#lib:dimension_symbol_formatting' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>dimension_symbol_formatting</a></span> <span class='curlybracket'>{</span>
character_set char_set <span class='operator'>=</span> character_set<span class='operator'>::</span>default_character_set;
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> CharT <span class='operator'>=</span> <span class='keyword'>char</span>, std<span class='operator'>::</span>output_iterator<span class='anglebracket'>&lt;</span>CharT<span class='anglebracket'>&gt;</span> Out, <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension________'><span class='tcode_in_codeblock'>Dimension</span></span></a> D<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> Out dimension_symbol_to<span class='parenthesis'>(</span>Out out, D d, <span class='keyword'>const</span> dimension_symbol_formatting<span class='operator'>&amp;</span> fmt <span class='operator'>=</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>dimension_symbol_formatting fmt <span class='operator'>=</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>, <span class='keyword'>typename</span> CharT <span class='operator'>=</span> <span class='keyword'>char</span>, <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension_________'><span class='tcode_in_codeblock'>Dimension</span></span></a> D<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> std<span class='operator'>::</span>string_view dimension_symbol<span class='parenthesis'>(</span>D<span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#qty.spec' title='5.4.3&emsp;Quantity specification'>[qty.<span class='shy'></span>spec]</a>, quantity specification</span>
<span class='comment'>// <a href='#qty.spec.concepts' title='5.4.3.2&emsp;Concepts'>[qty.<span class='shy'></span>spec.<span class='shy'></span>concepts]</a>, concepts</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> QuantitySpec <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> QuantitySpecOf <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// <a href='#qty.spec.types' title='5.4.3.3&emsp;Types'>[qty.<span class='shy'></span>spec.<span class='shy'></span>types]</a>, types</span>
<span class='comment'>// <a href='#named.qty' title='5.4.3.3.1&emsp;Named'>[named.<span class='shy'></span>qty]</a>, named</span>
<span class='keyword'>struct</span> is_kind;
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> is_kind <span id='lib:is_kind'><a class='hidden_link' href='#lib:is_kind' title='5.4.3.3.1&emsp;Named&emsp;[named.qty]'>is_kind</a></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> quantity_spec; <span class='comment'>// <i >not defined</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:BaseDimension'></a><i >BaseDimension</i> <span class='keyword'>auto</span> Dim, <a class='index' id='conceptref:QSProperty'></a><i >QSProperty</i> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> quantity_spec<span class='anglebracket'>&lt;</span>Dim, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:DerivedQuantitySpec'></a><i >DerivedQuantitySpec</i> <span class='keyword'>auto</span> Eq, <a class='index' id='conceptref:QSProperty_'></a><i >QSProperty</i> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> quantity_spec<span class='anglebracket'>&lt;</span>Eq, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:NamedQuantitySpec'></a><i >NamedQuantitySpec</i> <span class='keyword'>auto</span> QS, <a class='index' id='conceptref:QSProperty__'></a><i >QSProperty</i> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> quantity_spec<span class='anglebracket'>&lt;</span>QS, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:NamedQuantitySpec_'></a><i >NamedQuantitySpec</i> <span class='keyword'>auto</span> QS, <a class='index' id='conceptref:DerivedQuantitySpec_'></a><i >DerivedQuantitySpec</i> <span class='keyword'>auto</span> Eq, <a class='index' id='conceptref:QSProperty___'></a><i >QSProperty</i> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> quantity_spec<span class='anglebracket'>&lt;</span>QS, Eq, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span>;
<span class='comment'>// <a href='#derived.qty' title='5.4.3.3.2&emsp;Derived'>[derived.<span class='shy'></span>qty]</a>, derived</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:SymbolicConstant_'></a><i >SymbolicConstant</i><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> derived_quantity_spec;
<span class='comment'>// <a href='#dimless.qty' title='5.4.3.3.3&emsp;Base quantity of dimension one'>[dimless.<span class='shy'></span>qty]</a>, base quantity of dimension one</span>
<span class='keyword'>struct</span> dimensionless;
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> dimensionless <span id='lib:dimensionless'><a class='hidden_link' href='#lib:dimensionless' title='5.4.3.3.3&emsp;Base quantity of dimension one&emsp;[dimless.qty]'>dimensionless</a></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='comment'>// <a href='#kind.of.qty' title='5.4.3.3.4&emsp;Kind of'>[kind.<span class='shy'></span>of.<span class='shy'></span>qty]</a>, kind of</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>struct</span> kind_of_;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <span class='keyword'>requires</span> <span class='curlybracket'>{</span> <span class='keyword'>typename</span> kind_of_<span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>Q<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>; <span class='curlybracket'>}</span>
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> kind_of_<span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>Q<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span id='lib:kind_of'><a class='hidden_link' href='#lib:kind_of' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>kind_of</a></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='comment'>// <a href='#qty.spec.ops' title='5.4.3.5&emsp;Operations'>[qty.<span class='shy'></span>spec.<span class='shy'></span>ops]</a>, operations</span>
<span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec__'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> inverse<span class='parenthesis'>(</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec___'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> q<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>intmax_t Num, std<span class='operator'>::</span>intmax_t Den <span class='operator'>=</span> <span class='literal'>1</span>, <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec____'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Q<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> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_____'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> pow<span class='parenthesis'>(</span>Q q<span class='parenthesis'>)</span>;
<span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec______'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> sqrt<span class='parenthesis'>(</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_______'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> q<span class='parenthesis'>)</span>;
<span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> cbrt<span class='parenthesis'>(</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> q<span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#qty.spec.hier.algos' title='5.4.3.6&emsp;Hierarchy algorithms'>[qty.<span class='shy'></span>spec.<span class='shy'></span>hier.<span class='shy'></span>algos]</a>, hierarchy algorithms</span>
<span class='comment'>// <a href='#qty.spec.conv' title='5.4.3.6.1&emsp;Conversion'>[qty.<span class='shy'></span>spec.<span class='shy'></span>conv]</a>, conversion</span>
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> implicitly_convertible<span class='parenthesis'>(</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec__________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> from, <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec___________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> to<span class='parenthesis'>)</span>;
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> explicitly_convertible<span class='parenthesis'>(</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec____________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> from, <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> to<span class='parenthesis'>)</span>;
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> castable<span class='parenthesis'>(</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec______________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> from, <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_______________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> to<span class='parenthesis'>)</span>;
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> interconvertible<span class='parenthesis'>(</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> qs1, <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> qs2<span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#qty.get.kind' title='5.4.3.6.2&emsp;Get kind'>[qty.<span class='shy'></span>get.<span class='shy'></span>kind]</a>, <span class='tcode_in_codeblock'>get_<span class='shy'></span>kind</span></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <i ><span class='texttt'>see below</span></i> get_kind<span class='parenthesis'>(</span>Q<span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#get.common.qty.spec' title='5.4.3.6.3&emsp;Get common quantity specification'>[get.<span class='shy'></span>common.<span class='shy'></span>qty.<span class='shy'></span>spec]</a>, <span class='tcode_in_codeblock'>get_<span class='shy'></span>common_<span class='shy'></span>quantity_<span class='shy'></span>spec</span></span>
<span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> get_common_quantity_spec<span class='parenthesis'>(</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec____________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> qs<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// <a href='#qty.unit' title='5.4.4&emsp;Unit'>[qty.<span class='shy'></span>unit]</a>, unit</span>
<span class='comment'>// <a href='#qty.unit.mag' title='5.4.4.2&emsp;Magnitude'>[qty.<span class='shy'></span>unit.<span class='shy'></span>mag]</a>, magnitude</span>
<span class='comment'>// <a href='#qty.unit.mag.concepts' title='5.4.4.2.2&emsp;Concepts'>[qty.<span class='shy'></span>unit.<span class='shy'></span>mag.<span class='shy'></span>concepts]</a>, concepts</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> MagConstant <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> UnitMagnitude <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// <a href='#qty.unit.mag.types' title='5.4.4.2.3&emsp;Types'>[qty.<span class='shy'></span>unit.<span class='shy'></span>mag.<span class='shy'></span>types]</a>, types</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol, <span class='keyword'>long</span> <span class='keyword'>double</span> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Value <span class='anglebracket'>&gt;</span> <span class='literal'>0</span><span class='parenthesis'>)</span>
<span class='keyword'>struct</span> mag_constant;
<span class='comment'>// <a href='#qty.unit.mag.ops' title='5.4.4.2.4&emsp;Operations'>[qty.<span class='shy'></span>unit.<span class='shy'></span>mag.<span class='shy'></span>ops]</a>, operations</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:MagArg'></a><i >MagArg</i> <span class='keyword'>auto</span> V<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> mag <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>intmax_t N, std<span class='operator'>::</span>intmax_t D<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>N <span class='anglebracket'>&gt;</span> <span class='literal'>0</span><span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> mag_ratio <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:MagArg_'></a><i >MagArg</i> <span class='keyword'>auto</span> Base, <span class='keyword'>int</span> Num, <span class='keyword'>int</span> Den <span class='operator'>=</span> <span class='literal'>1</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude__'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> mag_power <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// constants</span>
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> <span id='lib:pi'><a class='hidden_link' href='#lib:pi' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>pi</a></span> <span class='keyword'>final</span> <span class='operator'>:</span>
mag_constant<span class='anglebracket'>&lt;</span><span class='curlybracket'>{</span><span class='literal'>u8"\u03C0"</span> <span class='comment'>/* <span class='tcode_in_codeblock'><span class='ucode'>U+03c0</span> <span class='uname'>GREEK SMALL LETTER PI</span></span> */</span>, <span class='literal'>"pi"</span><span class='curlybracket'>}</span>,
std<span class='operator'>::</span>numbers<span class='operator'>::</span>pi_v<span class='anglebracket'>&lt;</span><span class='keyword'>long</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>}</span> <span id='lib:pi_'><a class='hidden_link' href='#lib:pi' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>pi</a></span>;
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> \u03C0 <span class='comment'>/* <span class='tcode_in_codeblock'><span class='ucode'>U+03c0</span> <span class='uname'>GREEK SMALL LETTER PI</span></span> */</span> <span class='operator'>=</span> pi;
<span class='comment'>// <a href='#qty.unit.traits' title='5.4.4.3&emsp;Traits'>[qty.<span class='shy'></span>unit.<span class='shy'></span>traits]</a>, traits</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> space_before_unit_symbol <span class='operator'>=</span> <span class='literal'>true</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> <a class='index' id='lib:space_before_unit_symbol,one'></a>space_before_unit_symbol<span class='anglebracket'>&lt;</span>one<span class='anglebracket'>&gt;</span> <span class='operator'>=</span> <span class='literal'>false</span>;
<span class='comment'>// <a href='#qty.unit.concepts' title='5.4.4.4&emsp;Concepts'>[qty.<span class='shy'></span>unit.<span class='shy'></span>concepts]</a>, concepts</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> Unit <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> PrefixableUnit <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> AssociatedUnit <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> U, <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> UnitOf <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// <a href='#qty.unit.types' title='5.4.4.5&emsp;Types'>[qty.<span class='shy'></span>unit.<span class='shy'></span>types]</a>, types</span>
<span class='comment'>// <a href='#qty.scaled.unit' title='5.4.4.5.2&emsp;Scaled'>[qty.<span class='shy'></span>scaled.<span class='shy'></span>unit]</a>, scaled</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude___'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> M, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>struct</span> scaled_unit;
<span class='comment'>// <a href='#qty.named.unit' title='5.4.4.5.3&emsp;Named'>[qty.<span class='shy'></span>named.<span class='shy'></span>unit]</a>, named</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol, <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> named_unit; <span class='comment'>// <i >not defined</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol, <a class='index' id='conceptref:QuantityKindSpec'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>struct</span> named_unit<span class='anglebracket'>&lt;</span>Symbol, QS<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol, <a class='index' id='conceptref:QuantityKindSpec_'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS, <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> PO<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>struct</span> named_unit<span class='anglebracket'>&lt;</span>Symbol, QS, PO<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>struct</span> named_unit<span class='anglebracket'>&lt;</span>Symbol<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit__'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>struct</span> named_unit<span class='anglebracket'>&lt;</span>Symbol, U<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit___'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> U, <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> PO<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>struct</span> named_unit<span class='anglebracket'>&lt;</span>Symbol, U, PO<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol, <a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> U, <a class='index' id='conceptref:QuantityKindSpec__'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>struct</span> named_unit<span class='anglebracket'>&lt;</span>Symbol, U, QS<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol, <a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit_'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> U, <a class='index' id='conceptref:QuantityKindSpec___'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS,
<a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin__'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> PO<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>struct</span> named_unit<span class='anglebracket'>&lt;</span>Symbol, U, QS, PO<span class='anglebracket'>&gt;</span>;
<span class='comment'>// <a href='#qty.prefixed.unit' title='5.4.4.5.4&emsp;Prefixed'>[qty.<span class='shy'></span>prefixed.<span class='shy'></span>unit]</a>, prefixed</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol, <a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude____'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> M, <a href='#concept:PrefixableUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:PrefixableUnit'><span class='tcode_in_codeblock'>PrefixableUnit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>struct</span> prefixed_unit;
<span class='comment'>// <a href='#qty.common.unit' title='5.4.4.5.5&emsp;Common'>[qty.<span class='shy'></span>common.<span class='shy'></span>unit]</a>, common</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit____'><span class='tcode_in_codeblock'>Unit</span></span></a> U1, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_____'><span class='tcode_in_codeblock'>Unit</span></span></a> U2, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit______'><span class='tcode_in_codeblock'>Unit</span></span></a><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Rest<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> common_unit;
<span class='comment'>// <a href='#qty.derived.unit' title='5.4.4.5.6&emsp;Derived'>[qty.<span class='shy'></span>derived.<span class='shy'></span>unit]</a>, derived</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:SymbolicConstant__'></a><i >SymbolicConstant</i><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> derived_unit;
<span class='comment'>// <a href='#qty.unit.one' title='5.4.4.5.7&emsp;One'>[qty.<span class='shy'></span>unit.<span class='shy'></span>one]</a>, one</span>
<span class='keyword'>struct</span> one;
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> one <span id='lib:one'><a class='hidden_link' href='#lib:one' title='5.4.4.5.7&emsp;One&emsp;[qty.unit.one]'>one</a></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='comment'>// named derived units of a quantity of dimension one</span>
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> <span id='lib:percent'><a class='hidden_link' href='#lib:percent' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>percent</a></span> <span class='keyword'>final</span> <span class='operator'>:</span> named_unit<span class='anglebracket'>&lt;</span><span class='literal'>"%"</span>, mag_ratio<span class='anglebracket'>&lt;</span><span class='literal'>1</span>, <span class='literal'>100</span><span class='anglebracket'>&gt;</span> <span class='operator'>*</span> one<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>}</span> <span id='lib:percent_'><a class='hidden_link' href='#lib:percent' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>percent</a></span>;
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> <span id='lib:per_mille'><a class='hidden_link' href='#lib:per_mille' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>per_mille</a></span> <span class='keyword'>final</span> <span class='operator'>:</span>
named_unit<span class='anglebracket'>&lt;</span>symbol_text<span class='curlybracket'>{</span><span class='literal'>u8"\u2030"</span> <span class='comment'>/* <span class='tcode_in_codeblock'><span class='ucode'>U+2030</span> <span class='uname'>PER MILLE SIGN</span></span> */</span>, <span class='literal'>"%o"</span><span class='curlybracket'>}</span>,
mag_ratio<span class='anglebracket'>&lt;</span><span class='literal'>1</span>, <span class='literal'>1000</span><span class='anglebracket'>&gt;</span> <span class='operator'>*</span> one<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>}</span> <span id='lib:per_mille_'><a class='hidden_link' href='#lib:per_mille' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>per_mille</a></span>;
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> <span id='lib:parts_per_million'><a class='hidden_link' href='#lib:parts_per_million' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>parts_per_million</a></span> <span class='keyword'>final</span> <span class='operator'>:</span>
named_unit<span class='anglebracket'>&lt;</span><span class='literal'>"ppm"</span>, mag_ratio<span class='anglebracket'>&lt;</span><span class='literal'>1</span>, <span class='literal'>1'000'000</span><span class='anglebracket'>&gt;</span> <span class='operator'>*</span> one<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>}</span> <span id='lib:parts_per_million_'><a class='hidden_link' href='#lib:parts_per_million' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>parts_per_million</a></span>;
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <span id='lib:ppm'><a class='hidden_link' href='#lib:ppm' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>ppm</a></span> <span class='operator'>=</span> parts_per_million;
<span class='comment'>// <a href='#qty.unit.ops' title='5.4.4.6&emsp;Operations'>[qty.<span class='shy'></span>unit.<span class='shy'></span>ops]</a>, operations</span>
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_______'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> inverse<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>intmax_t Num, std<span class='operator'>::</span>intmax_t Den <span class='operator'>=</span> <span class='literal'>1</span>, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit__________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> pow<span class='parenthesis'>(</span>U u<span class='parenthesis'>)</span>;
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit___________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> sqrt<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit____________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_____________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> cbrt<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit______________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_______________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> square<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> cubic<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit__________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#qty.unit.cmp' title='5.4.4.7&emsp;Comparison'>[qty.<span class='shy'></span>unit.<span class='shy'></span>cmp]</a>, comparison</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit___________________'><span class='tcode_in_codeblock'>Unit</span></span></a> From, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit____________________'><span class='tcode_in_codeblock'>Unit</span></span></a> To<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> convertible<span class='parenthesis'>(</span>From from, To to<span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#qty.unit.obs' title='5.4.4.8&emsp;Observers'>[qty.<span class='shy'></span>unit.<span class='shy'></span>obs]</a>, observers</span>
<span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> get_quantity_spec<span class='parenthesis'>(</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit__'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_____________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> get_unit<span class='parenthesis'>(</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit___'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit______________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> get_common_unit<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_______________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> us<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// <a href='#qty.unit.sym.fmt' title='5.4.4.10&emsp;Symbol formatting'>[qty.<span class='shy'></span>unit.<span class='shy'></span>sym.<span class='shy'></span>fmt]</a>, symbol formatting</span>
<span class='keyword'>enum</span> <span class='keyword'>class</span> <span id='lib:unit_symbol_solidus'><a class='hidden_link' href='#lib:unit_symbol_solidus' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>unit_symbol_solidus</a></span> <span class='operator'>:</span> std<span class='operator'>::</span>int8_t <span class='curlybracket'>{</span>
one_denominator,
always,
never,
default_denominator <span class='operator'>=</span> one_denominator
<span class='curlybracket'>}</span>;
<span class='keyword'>enum</span> <span class='keyword'>class</span> <span id='lib:unit_symbol_separator'><a class='hidden_link' href='#lib:unit_symbol_separator' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>unit_symbol_separator</a></span> <span class='operator'>:</span> std<span class='operator'>::</span>int8_t <span class='curlybracket'>{</span>
space,
half_high_dot,
default_separator <span class='operator'>=</span> space
<span class='curlybracket'>}</span>;
<span class='keyword'>struct</span> <span id='lib:unit_symbol_formatting'><a class='hidden_link' href='#lib:unit_symbol_formatting' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>unit_symbol_formatting</a></span> <span class='curlybracket'>{</span>
character_set char_set <span class='operator'>=</span> character_set<span class='operator'>::</span>default_character_set;
unit_symbol_solidus solidus <span class='operator'>=</span> unit_symbol_solidus<span class='operator'>::</span>default_denominator;
unit_symbol_separator separator <span class='operator'>=</span> unit_symbol_separator<span class='operator'>::</span>default_separator;
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> CharT <span class='operator'>=</span> <span class='keyword'>char</span>, std<span class='operator'>::</span>output_iterator<span class='anglebracket'>&lt;</span>CharT<span class='anglebracket'>&gt;</span> Out, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> Out unit_symbol_to<span class='parenthesis'>(</span>Out out, U u, <span class='keyword'>const</span> unit_symbol_formatting<span class='operator'>&amp;</span> fmt <span class='operator'>=</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>unit_symbol_formatting fmt <span class='operator'>=</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>, <span class='keyword'>typename</span> CharT <span class='operator'>=</span> <span class='keyword'>char</span>, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> std<span class='operator'>::</span>string_view unit_symbol<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#qty.ref.concepts' title='5.4.5&emsp;Concepts'>[qty.<span class='shy'></span>ref.<span class='shy'></span>concepts]</a>, concepts</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='concept:Reference'><span id='lib:Reference'><span class='tcode_in_codeblock'>Reference</span></span></span></a> <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:ReferenceOf' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='concept:ReferenceOf'><span id='lib:ReferenceOf'><span class='tcode_in_codeblock'>ReferenceOf</span></span></span></a> <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// <a href='#qty.ref.syn' title='5.4.6&emsp;Class template reference'>[qty.<span class='shy'></span>ref.<span class='shy'></span>syn]</a>, class template <span class='tcode_in_codeblock'>reference</span></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec______________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Q, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit__________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> reference;
<span class='comment'>// <a href='#qty.ref.ops' title='5.4.7&emsp;Operations'>[qty.<span class='shy'></span>ref.<span class='shy'></span>ops]</a>, operations</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdRep, <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference'><span class='tcode_in_codeblock'>Reference</span></span></a> R,
<a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> Rep <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdRep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a class='index' id='conceptref:OffsetUnit'></a><i >OffsetUnit</i><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>get_unit<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> quantity<span class='anglebracket'>&lt;</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rep<span class='anglebracket'>&gt;</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>FwdRep<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, R r<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdRep, <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_'><span class='tcode_in_codeblock'>Reference</span></span></a> R,
<a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf_'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> Rep <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdRep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a class='index' id='conceptref:OffsetUnit_'></a><i >OffsetUnit</i><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>get_unit<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>FwdRep<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, R<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference__'><span class='tcode_in_codeblock'>Reference</span></span></a> R, <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_'><span class='tcode_in_codeblock'>Quantity</span></span></a> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity__'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q, R<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference___'><span class='tcode_in_codeblock'>Reference</span></span></a> R, <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity___'><span class='tcode_in_codeblock'>Quantity</span></span></a> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity____'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q, R<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference____'><span class='tcode_in_codeblock'>Reference</span></span></a> R, <span class='keyword'>typename</span> Rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf__'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span>, get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>R, Rep<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_____'><span class='tcode_in_codeblock'>Reference</span></span></a> R, <span class='keyword'>typename</span> Rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf___'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span>, get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>R, Rep<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference______'><span class='tcode_in_codeblock'>Reference</span></span></a> R, <span class='keyword'>typename</span> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_____'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>R, Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_______'><span class='tcode_in_codeblock'>Reference</span></span></a> R, <span class='keyword'>typename</span> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity______'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>R, Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
<span class='comment'>// <a href='#qty.ref.obs' title='5.4.9&emsp;Observers'>[qty.<span class='shy'></span>ref.<span class='shy'></span>obs]</a>, observers</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q, <span class='keyword'>typename</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_______________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> get_quantity_spec<span class='parenthesis'>(</span>reference<span class='anglebracket'>&lt;</span>Q, U<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q, <span class='keyword'>typename</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit___________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> get_unit<span class='parenthesis'>(</span>reference<span class='anglebracket'>&lt;</span>Q, U<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
<span class='keyword'>consteval</span> <a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit____'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> get_common_reference<span class='parenthesis'>(</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit_____'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> u1,
<a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit______'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> u2,
<a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit_______'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> rest<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference________'><span class='tcode_in_codeblock'>Reference</span></span></a> R1, <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_________'><span class='tcode_in_codeblock'>Reference</span></span></a> R2, <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference__________'><span class='tcode_in_codeblock'>Reference</span></span></a><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Rest<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference___________'><span class='tcode_in_codeblock'>Reference</span></span></a> <span class='keyword'>auto</span> get_common_reference<span class='parenthesis'>(</span>R1 r1, R2 r2, Rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> rest<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// <a href='#qty.rep' title='5.5&emsp;Representation'>[qty.<span class='shy'></span>rep]</a>, representation</span>
<span class='keyword'>enum</span> <span class='keyword'>class</span> <span id='lib:quantity_character'><a class='hidden_link' href='#lib:quantity_character' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>quantity_character</a></span> <span class='curlybracket'>{</span> scalar, complex, vector, tensor <span class='curlybracket'>}</span>;
<span class='comment'>// <a href='#qty.rep.traits' title='5.5.2&emsp;Traits'>[qty.<span class='shy'></span>rep.<span class='shy'></span>traits]</a>, traits</span>
<span class='comment'>// <a href='#qty.fp.traits' title='5.5.2.1&emsp;Floating-point'>[qty.<span class='shy'></span>fp.<span class='shy'></span>traits]</a>, floating-point</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> treat_as_floating_point <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// <a href='#qty.char.traits' title='5.5.2.2&emsp;Quantity character'>[qty.<span class='shy'></span>char.<span class='shy'></span>traits]</a>, quantity character</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> disable_scalar <span class='operator'>=</span> <span class='literal'>false</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> <a class='index' id='lib:disable_scalar,bool'></a>disable_scalar<span class='anglebracket'>&lt;</span><span class='keyword'>bool</span><span class='anglebracket'>&gt;</span> <span class='operator'>=</span> <span class='literal'>true</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> <a class='index' id='lib:disable_scalar,std::complex'></a>disable_scalar<span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>complex<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>=</span> <span class='literal'>true</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> disable_complex <span class='operator'>=</span> <span class='literal'>false</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> disable_vector <span class='operator'>=</span> <span class='literal'>false</span>;
<span class='comment'>// <a href='#qty.val.traits' title='5.5.2.3&emsp;Values'>[qty.<span class='shy'></span>val.<span class='shy'></span>traits]</a>, values</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> representation_values;
<span class='comment'>// <a href='#qty.rep.cpos' title='5.5.3&emsp;Customization point objects'>[qty.<span class='shy'></span>rep.<span class='shy'></span>cpos]</a>, customization point objects</span>
<span class='keyword'>inline</span> <span class='keyword'>namespace</span> <i ><span class='texttt'>unspecified</span></i> <span class='curlybracket'>{</span>
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <i ><span class='texttt'>unspecified</span></i> real <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <i ><span class='texttt'>unspecified</span></i> imag <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <i ><span class='texttt'>unspecified</span></i> modulus <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <i ><span class='texttt'>unspecified</span></i> magnitude <span class='operator'>=</span> <i ><span class='texttt'>unspecified</span></i>;
<span class='curlybracket'>}</span>
<span class='comment'>// <a href='#qty.rep.concepts' title='5.5.4&emsp;Concepts'>[qty.<span class='shy'></span>rep.<span class='shy'></span>concepts]</a>, concepts</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> Representation <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, quantity_character Ch<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> RepresentationOf <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// <a href='#qty' title='5.6&emsp;Quantity'>[qty]</a>, quantity</span>
<span class='comment'>// <a href='#qty.like' title='5.6.2&emsp;Interoperability'>[qty.<span class='shy'></span>like]</a>, interoperability</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> quantity_like_traits; <span class='comment'>// <i >not defined</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> QuantityLike <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// <a href='#qty.syn' title='5.6.3&emsp;Class template quantity'>[qty.<span class='shy'></span>syn]</a>, class template <span class='tcode_in_codeblock'>quantity</span></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> Quantity <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q, <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> QuantityOf <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference____________'><span class='tcode_in_codeblock'>Reference</span></span></a> <span class='keyword'>auto</span> R, <a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf____'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> Rep <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>class</span> quantity;
<span class='comment'>// <a href='#qty.delta' title='5.6.14&emsp;Construction helper delta'>[qty.<span class='shy'></span>delta]</a>, construction helper <span class='tcode_in_codeblock'>delta</span></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_____________'><span class='tcode_in_codeblock'>Reference</span></span></a> R<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> delta_;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference______________'><span class='tcode_in_codeblock'>Reference</span></span></a> <span class='keyword'>auto</span> R<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> delta_<span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span id='lib:delta'><a class='hidden_link' href='#lib:delta' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>delta</a></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='comment'>// <a href='#qty.non.mem.conv' title='5.6.15&emsp;Non-member conversions'>[qty.<span class='shy'></span>non.<span class='shy'></span>mem.<span class='shy'></span>conv]</a>, non-member conversions</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit____________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <i ><span class='texttt'>see below</span></i><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_______'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i> q<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation'><span class='tcode_in_codeblock'>Representation</span></span></a> ToRep, <i ><span class='texttt'>see below</span></i><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> quantity<span class='anglebracket'>&lt;</span><i ><span class='texttt'>see below</span></i>, ToRep<span class='anglebracket'>&gt;</span> value_cast<span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i> q<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_____________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation_'><span class='tcode_in_codeblock'>Representation</span></span></a> ToRep, <i ><span class='texttt'>see below</span></i><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i> q<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation__'><span class='tcode_in_codeblock'>Representation</span></span></a> ToRep, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit______________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <i ><span class='texttt'>see below</span></i><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i> q<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity__________'><span class='tcode_in_codeblock'>Quantity</span></span></a> ToQ, <i ><span class='texttt'>see below</span></i><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity___________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i> q<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> ToQS, <i ><span class='texttt'>see below</span></i><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity____________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> quantity_cast<span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i> q<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>
<span class='comment'>// <a href='#qty.common.type' title='5.6.16&emsp;std&#x200b;::&#x200b;common_&shy;type specializations'>[qty.<span class='shy'></span>common.<span class='shy'></span>type]</a>, <span class='tcode_in_codeblock'>std&#x200b;::&#x200b;common_<span class='shy'></span>type</span> specializations</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>mp_units<span class='operator'>::</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_____________'><span class='tcode_in_codeblock'>Quantity</span></span></a> Q1, mp_units<span class='operator'>::</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity______________'><span class='tcode_in_codeblock'>Quantity</span></span></a> Q2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>struct</span> std<span class='operator'>::</span>common_type<span class='anglebracket'>&lt;</span>Q1, Q2<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>mp_units<span class='operator'>::</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_______________'><span class='tcode_in_codeblock'>Quantity</span></span></a> Q, mp_units<span class='operator'>::</span><a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation___'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>struct</span> std<span class='operator'>::</span>common_type<span class='anglebracket'>&lt;</span>Q, Value<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>mp_units<span class='operator'>::</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> Q, mp_units<span class='operator'>::</span><a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation____'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <span class='keyword'>requires</span> <span class='curlybracket'>{</span> <span class='keyword'>typename</span> std<span class='operator'>::</span>common_type<span class='anglebracket'>&lt;</span>Q, Value<span class='anglebracket'>&gt;</span>; <span class='curlybracket'>}</span>
<span class='keyword'>struct</span> <a class='index' id='lib:std::common_type,quantity'></a>std<span class='operator'>::</span>common_type<span class='anglebracket'>&lt;</span>Value, Q<span class='anglebracket'>&gt;</span> <span class='operator'>:</span> std<span class='operator'>::</span>common_type<span class='anglebracket'>&lt;</span>Q, Value<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='comment'>// <a href='#qty.pt' title='5.7&emsp;Quantity point'>[qty.<span class='shy'></span>pt]</a>, quantity point</span>
<span class='comment'>// <a href='#qty.pt.orig' title='5.7.2&emsp;Point origin'>[qty.<span class='shy'></span>pt.<span class='shy'></span>orig]</a>, point origin</span>
<span class='comment'>// <a href='#qty.pt.orig.concepts' title='5.7.2.2&emsp;Concepts'>[qty.<span class='shy'></span>pt.<span class='shy'></span>orig.<span class='shy'></span>concepts]</a>, concepts</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> PointOrigin <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> PointOriginFor <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// <a href='#qty.pt.orig.types' title='5.7.2.3&emsp;Types'>[qty.<span class='shy'></span>pt.<span class='shy'></span>orig.<span class='shy'></span>types]</a>, types</span>
<span class='comment'>// <a href='#qty.abs.pt.orig' title='5.7.2.3.1&emsp;Absolute'>[qty.<span class='shy'></span>abs.<span class='shy'></span>pt.<span class='shy'></span>orig]</a>, absolute</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> absolute_point_origin;
<span class='comment'>// <a href='#qty.rel.pt.orig' title='5.7.2.3.2&emsp;Relative'>[qty.<span class='shy'></span>rel.<span class='shy'></span>pt.<span class='shy'></span>orig]</a>, relative</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint'><span class='tcode_in_codeblock'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> QP<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> relative_point_origin;
<span class='comment'>// <a href='#qty.zeroth.pt.orig' title='5.7.2.3.3&emsp;Zeroth'>[qty.<span class='shy'></span>zeroth.<span class='shy'></span>pt.<span class='shy'></span>orig]</a>, zeroth</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> zeroth_point_origin_;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> zeroth_point_origin_<span class='anglebracket'>&lt;</span>QS<span class='anglebracket'>&gt;</span> <span id='lib:zeroth_point_origin'><a class='hidden_link' href='#lib:zeroth_point_origin' title='5.2.2&emsp;Module mp_&shy;units.core synopsis&emsp;[mp.units.core.syn]'>zeroth_point_origin</a></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='comment'>// <a href='#qty.def.pt.orig' title='5.7.2.5.2&emsp;Default'>[qty.<span class='shy'></span>def.<span class='shy'></span>pt.<span class='shy'></span>orig]</a>, default</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_______________'><span class='tcode_in_codeblock'>Reference</span></span></a> R<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <a href='#concept:PointOriginFor' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOriginFor'><span class='tcode_in_codeblock'>PointOriginFor</span></span></a><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> default_point_origin<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#qty.pt.like' title='5.7.3&emsp;Interoperability'>[qty.<span class='shy'></span>pt.<span class='shy'></span>like]</a>, interoperability</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> quantity_point_like_traits; <span class='comment'>// <i >not defined</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> QuantityPointLike <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// <a href='#qty.pt.syn' title='5.7.4&emsp;Class template quantity_&shy;point'>[qty.<span class='shy'></span>pt.<span class='shy'></span>syn]</a>, class template <span class='tcode_in_codeblock'>quantity_<span class='shy'></span>point</span></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> QuantityPoint <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> QP, <span class='keyword'>auto</span> V<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> QuantityPointOf <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference________________'><span class='tcode_in_codeblock'>Reference</span></span></a> <span class='keyword'>auto</span> R,
<a href='#concept:PointOriginFor' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOriginFor_'><span class='tcode_in_codeblock'>PointOriginFor</span></span></a><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> PO <span class='operator'>=</span> default_point_origin<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span>,
<a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf_____'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> Rep <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>class</span> quantity_point;
<span class='comment'>// <a href='#qty.point' title='5.7.14&emsp;Construction helper point'>[qty.<span class='shy'></span>point]</a>, construction helper <span class='tcode_in_codeblock'>point</span></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_________________'><span class='tcode_in_codeblock'>Reference</span></span></a> R<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> point_;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference__________________'><span class='tcode_in_codeblock'>Reference</span></span></a> <span class='keyword'>auto</span> R<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> point_<span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span id='lib:point'><a class='hidden_link' href='#lib:point' title='5.7.14&emsp;Construction helper point&emsp;[qty.point]'>point</a></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='comment'>// <a href='#qty.pt.non.mem.conv' title='5.7.15&emsp;Non-member conversions'>[qty.<span class='shy'></span>pt.<span class='shy'></span>non.<span class='shy'></span>mem.<span class='shy'></span>conv]</a>, non-member conversions</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_______________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <i ><span class='texttt'>see below</span></i><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint_'><span class='tcode_in_codeblock'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i> qp<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation_____'><span class='tcode_in_codeblock'>Representation</span></span></a> ToRep, <i ><span class='texttt'>see below</span></i><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> quantity_point<span class='anglebracket'>&lt;</span><i ><span class='texttt'>see below</span></i>, <i ><span class='texttt'>see below</span></i>, ToRep<span class='anglebracket'>&gt;</span> value_cast<span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i> qp<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation______'><span class='tcode_in_codeblock'>Representation</span></span></a> ToRep, <i ><span class='texttt'>see below</span></i><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint__'><span class='tcode_in_codeblock'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i> qp<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation_______'><span class='tcode_in_codeblock'>Representation</span></span></a> ToRep, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <i ><span class='texttt'>see below</span></i><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint___'><span class='tcode_in_codeblock'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i> qp<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> ToQ, <i ><span class='texttt'>see below</span></i><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint____'><span class='tcode_in_codeblock'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i> qp<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint_____'><span class='tcode_in_codeblock'>QuantityPoint</span></span></a> ToQP, <i ><span class='texttt'>see below</span></i><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint______'><span class='tcode_in_codeblock'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i> qp<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec____________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> ToQS, <i ><span class='texttt'>see below</span></i><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint_______'><span class='tcode_in_codeblock'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> quantity_cast<span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i> qp<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>
</span></span></div></div><div id='mp.units.systems.syn' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.2.3</a> Module <span class='texttt'>mp_<span class='shy'></span>units.systems</span> synopsis <a class='abbr_ref' href='mp.units.systems.syn.html'>[mp.units.systems.syn]</a></h3><div class='texpara'><span id='module:mp_units.systems'><div class='marginalizedparent'><a class='itemDeclLink' href='#module:mp_units.systems'>🔗</a></div><span class='codeblock'><span class='keyword'>export</span> <span class='keyword'>module</span> mp_units<span class='operator'>.</span>systems;
<span class='keyword'>export</span> <span class='keyword'>import</span> mp_units<span class='operator'>.</span>core;
<span class='keyword'>import</span> std;
<span class='keyword'>export</span> <span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='comment'>// <a href='#qty.chrono' title='5.9&emsp;std&#x200b;::&#x200b;chrono interoperability'>[qty.<span class='shy'></span>chrono]</a>, <span class='tcode_in_codeblock'>std&#x200b;::&#x200b;chrono</span> interoperability</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Rep, <span class='keyword'>typename</span> Period<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> quantity_like_traits<span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'>&lt;</span>Rep, Period<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Clock<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> chrono_point_origin_;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Clock<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> chrono_point_origin_<span class='anglebracket'>&lt;</span>Clock<span class='anglebracket'>&gt;</span> <span id='lib:chrono_point_origin'><a class='hidden_link' href='#lib:chrono_point_origin' title='5.2.3&emsp;Module mp_&shy;units.systems synopsis&emsp;[mp.units.systems.syn]'>chrono_point_origin</a></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Clock, <span class='keyword'>typename</span> Rep, <span class='keyword'>typename</span> Period<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> quantity_point_like_traits<span class='anglebracket'>&lt;</span>
std<span class='operator'>::</span>chrono<span class='operator'>::</span>time_point<span class='anglebracket'>&lt;</span>Clock, std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'>&lt;</span>Rep, Period<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></span></div></div></div><div id='qty.utils' class='section'><h2 ><a class='secnum' style='min-width:65pt'>5.3</a> Utilities <a class='abbr_ref' href='qty.utils.html'>[qty.utils]</a></h2><div id='qty.utils.non.types' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.3.1</a> Non-types <a class='abbr_ref' href='qty.utils.non.types.html'>[qty.utils.non.types]</a></h3><div class='texpara'><div id='lib:is-derived-from-specialization-of'><div id='lib:is-specialization-of'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:is-specialization-of'>🔗</a></div><code class='itemdeclcode'><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-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'><div class='marginalizedparent'><a class='marginalized' href='qty.utils.non.types.html#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='qty.utils.non.types-1.sentence-1' class='sentence'><i >Returns</i>: <ul class='itemize'><li id='qty.utils.non.types-1.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.utils.non.types-1.1'>(1.1)</a></div><div class='texpara'><div id='qty.utils.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='#qty.utils.non.types-1.1.sentence-1'>.</a></div></div></li><li id='qty.utils.non.types-1.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.utils.non.types-1.2'>(1.2)</a></div><div class='texpara'><div id='qty.utils.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='#qty.utils.non.types-1.2.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.utils.non.types.html#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='qty.utils.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='#qty.utils.non.types-2.sentence-1'>.</a></div></div></div></div></div><div id='qty.ratio' class='section'><h3 ><a class='secnum' 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;
std<span class='operator'>::</span>intmax_t den;
<span class='keyword'>consteval</span> <i >ratio</i><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>;
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><i >ratio</i>, <i >ratio</i><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>;
<span class='keyword'>friend</span> <span class='keyword'>consteval</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><i >ratio</i> lhs, <i >ratio</i> rhs<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> <span class='parenthesis'>(</span>lhs <span class='operator'>-</span> rhs<span class='parenthesis'>)</span><span class='operator'>.</span>num <span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span> <span class='literal'>0</span>; <span class='curlybracket'>}</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <i >ratio</i> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span><i >ratio</i> r<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> <span class='curlybracket'>{</span><span class='operator'>-</span>r<span class='operator'>.</span>num, r<span class='operator'>.</span>den<span class='curlybracket'>}</span>; <span class='curlybracket'>}</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <i >ratio</i> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span><i >ratio</i> lhs, <i >ratio</i> rhs<span class='parenthesis'>)</span>
<span class='curlybracket'>{</span>
<span class='keyword'>return</span> <span class='curlybracket'>{</span>lhs<span class='operator'>.</span>num <span class='operator'>*</span> rhs<span class='operator'>.</span>den <span class='operator'>+</span> lhs<span class='operator'>.</span>den <span class='operator'>*</span> rhs<span class='operator'>.</span>num, lhs<span class='operator'>.</span>den <span class='operator'>*</span> rhs<span class='operator'>.</span>den<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <i >ratio</i> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span><i >ratio</i> lhs, <i >ratio</i> rhs<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> lhs <span class='operator'>+</span> <span class='parenthesis'>(</span><span class='operator'>-</span>rhs<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <i >ratio</i> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><i >ratio</i> lhs, <i >ratio</i> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <i >ratio</i> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span><i >ratio</i> lhs, <i >ratio</i> rhs<span class='parenthesis'>)</span>
<span class='curlybracket'>{</span>
<span class='keyword'>return</span> lhs <span class='operator'>*</span> <i >ratio</i><span class='curlybracket'>{</span>rhs<span class='operator'>.</span>den, rhs<span class='operator'>.</span>num<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>;
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> <i >is-integral</i><span class='parenthesis'>(</span><i >ratio</i> r<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> r<span class='operator'>.</span>num <span class='operator'>%</span> r<span class='operator'>.</span>den <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>0</span>; <span class='curlybracket'>}</span>
<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'><div class='marginalizedparent'><a class='marginalized' href='qty.ratio.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.ratio.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.ratio.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.ratio.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.ratio.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.ratio.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.ratio.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.ratio.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.ratio.html#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' 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>
<span class='keyword'>class</span> symbol_text <span class='curlybracket'>{</span>
<span class='keyword'>public</span><span class='operator'>:</span>
std<span class='operator'>::</span>fixed_u8string<span class='anglebracket'>&lt;</span>N<span class='anglebracket'>&gt;</span> <i >utf8</i>; <span class='comment'>// <i >exposition only</i></span>
std<span class='operator'>::</span>fixed_string<span class='anglebracket'>&lt;</span>M<span class='anglebracket'>&gt;</span> <i >portable</i>; <span class='comment'>// <i >exposition only</i></span>
<span class='comment'>// constructors</span>
<span class='keyword'>constexpr</span> symbol_text<span class='parenthesis'>(</span><span class='keyword'>char</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'>char</span> <span class='parenthesis'>(</span><span class='operator'>&amp;</span>portable<span class='parenthesis'>)</span><span class='squarebracket'>[</span>N <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_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>;
<span class='comment'>// observers</span>
<span class='keyword'>constexpr</span> <span class='keyword'>const</span> <span class='keyword'>auto</span><span class='operator'>&amp;</span> <span id='lib:symbol_text,utf8'><span id='lib:utf8,symbol_text'>utf8</span></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> <i >utf8</i>; <span class='curlybracket'>}</span>
<span class='keyword'>constexpr</span> <span class='keyword'>const</span> <span class='keyword'>auto</span><span class='operator'>&amp;</span> <span id='lib:symbol_text,portable'><span id='lib:portable,symbol_text'>portable</span></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> <i >portable</i>; <span class='curlybracket'>}</span>
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> <span id='lib:symbol_text,empty'><span id='lib:empty,symbol_text'>empty</span></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='curlybracket'>{</span> <span class='keyword'>return</span> utf8<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
<span class='comment'>// string operations</span>
<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>;
<span class='comment'>// comparison</span>
<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'>bool</span> <span class='keyword'>operator</span><span class='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> <span class='keyword'>noexcept</span>;
<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>;
<span class='curlybracket'>}</span>;
symbol_text<span class='parenthesis'>(</span><span class='keyword'>char</span><span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> symbol_text<span class='anglebracket'>&lt;</span><span class='literal'>1</span>, <span class='literal'>1</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>size_t N<span class='anglebracket'>&gt;</span>
symbol_text<span class='parenthesis'>(</span><span class='keyword'>const</span> <span class='keyword'>char</span> <span class='parenthesis'>(</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span><span class='squarebracket'>[</span>N<span class='squarebracket'>]</span><span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> symbol_text<span class='anglebracket'>&lt;</span>N <span class='operator'>-</span> <span class='literal'>1</span>, N <span class='operator'>-</span> <span class='literal'>1</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>size_t N<span class='anglebracket'>&gt;</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><span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> symbol_text<span class='anglebracket'>&lt;</span>N, N<span class='anglebracket'>&gt;</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>
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><span class='parenthesis'>)</span><span class='squarebracket'>[</span>N<span class='squarebracket'>]</span>, <span class='keyword'>const</span> <span class='keyword'>char</span> <span class='parenthesis'>(</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span><span class='squarebracket'>[</span>M<span class='squarebracket'>]</span><span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> symbol_text<span class='anglebracket'>&lt;</span>N <span class='operator'>-</span> <span class='literal'>1</span>, M <span class='operator'>-</span> <span class='literal'>1</span><span class='anglebracket'>&gt;</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>
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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.txt.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.txt.html#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>;
<span class='keyword'>consteval</span> symbol_text<span class='parenthesis'>(</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>N <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_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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.txt.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.txt.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.txt.html#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>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='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>;
<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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.txt.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.txt.html#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' 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' 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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.general.html#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>
<span class='comment'>// <span class='tcode_in_codeblock'>derived_<span class='shy'></span>unit&lt;si&#x200b;::&#x200b;kilo_<span class='shy'></span>&lt;si&#x200b;::&#x200b;gram&gt;, si&#x200b;::&#x200b;kilo_<span class='shy'></span>&lt;si&#x200b;::&#x200b;metre&gt;, per&lt;power&lt;non_<span class='shy'></span>si&#x200b;::&#x200b;hour, 2&gt;&gt;&gt;</span></span>
</span> <div id='qty.sym.expr.general-1.sentence-2' class='sentence'>
The library ensures <span class='texttt'><span class='keyword'>decltype</span><span class='parenthesis'>(</span>kg <span class='operator'>*</span> km <span class='operator'>/</span> square<span class='parenthesis'>(</span>h<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is styled-like as commented in diagnostics,
provided that, in the implementation-defined total order of types,
<span class='texttt'><span class='keyword'>decltype</span><span class='parenthesis'>(</span>kg<span class='parenthesis'>)</span></span> is less than <span class='texttt'><span class='keyword'>decltype</span><span class='parenthesis'>(</span>km<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.sym.expr.general-1.sentence-2'>.</a></div> —&nbsp;<i>end example</i>]</div></div></div></div></div><div id='qty.sym.expr.concepts' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.3.4.2</a> Concept <span class='texttt'><i >SymbolicConstant</i></span> <a class='abbr_ref' href='qty.sym.expr.concepts.html'>[qty.sym.expr.concepts]</a></h4><div class='texpara'><div class='itemdecl' id='concept:SymbolicConstant'><div class='marginalizedparent'><a class='itemDeclLink' href='#concept:SymbolicConstant'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >SymbolicConstant</i></span><a class='index' id='concept:SymbolicConstant'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.concepts.html#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' 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>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, <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> per <span class='keyword'>final</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.types.html#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>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> F, <span class='keyword'>int</span> Num, <span class='keyword'>int</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Den<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>struct</span> power <span class='keyword'>final</span> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >factor</i> <span class='operator'>=</span> F; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <i >ratio</i> <i >exponent</i><span class='curlybracket'>{</span>Num, Den<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='curlybracket'>}</span>; <span class='comment'>// <i >exposition only</i></span>
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.types.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.types.html#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' 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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.algos.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.algos.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.algos.html#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>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> OneType, <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 >expr-fractions</i> <span class='curlybracket'>{</span> <span class='comment'>// <i >exposition only</i></span>
<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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.algos.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.algos.html#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
fractions thereof<a class='hidden_link' href='#qty.sym.expr.algos-5.sentence-4'>.</a></div></div></div><div class='texpara'><div id='lib:expr-pow'><div id='lib:expr-invert'><div id='lib:expr-divide'><div id='lib:expr-multiply'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:expr-multiply'>🔗</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='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> Lhs, <span class='keyword'>typename</span> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >expr-multiply</i></span><span class='parenthesis'>(</span>Lhs, Rhs<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'>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> Lhs, <span class='keyword'>typename</span> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >expr-divide</i></span><span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<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'>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'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >expr-invert</i></span><span class='parenthesis'>(</span>T<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>intmax_t Num, std<span class='operator'>::</span>intmax_t Den, <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'>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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.algos.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.algos.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.algos.html#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>,
then its input is the product of the inverse of its template arguments, and
the following also apply<a class='hidden_link' href='#qty.sym.expr.algos-8.2.sentence-1'>.</a></div></div></li><li id='qty.sym.expr.algos-8.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-8.3'>(8.3)</a></div><div class='texpara'><div id='qty.sym.expr.algos-8.3.sentence-1' class='sentence'>A specialization of the form <span class='texttt'>power<span class='anglebracket'>&lt;</span>F, Num<span class='anglebracket'>&gt;</span></span>,
then its input is <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-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">Num</span></span></span></span></span></span></span></span></span>, or
a specialization of the form <span class='texttt'>power<span class='anglebracket'>&lt;</span>F, Num, Den<span class='anglebracket'>&gt;</span></span>,
then its input is <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>, and
the following also applies<a class='hidden_link' href='#qty.sym.expr.algos-8.3.sentence-1'>.</a></div></div></li><li id='qty.sym.expr.algos-8.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.sym.expr.algos-8.4'>(8.4)</a></div><div class='texpara'><div id='qty.sym.expr.algos-8.4.sentence-1' class='sentence'>Otherwise, the input is the symbolic constant itself<a class='hidden_link' href='#qty.sym.expr.algos-8.4.sentence-1'>.</a></div></div></li></ul></div> <div id='qty.sym.expr.algos-example-2' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#qty.sym.expr.algos-example-2'>2</a></i>:&ensp;<div id='qty.sym.expr.algos-8.sentence-3' class='sentence'>Item by item, this algorithm step goes from the C++ parameter type
<span class='texttt'><span class='keyword'>decltype</span><span class='parenthesis'>(</span>km <span class='operator'>/</span> square<span class='parenthesis'>(</span>h<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span>,
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-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-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">b</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> where <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-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-texatom MJXc-space3"><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></span></span> and <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">b</span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-texatom MJXc-space3"><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></span> (symbolic substitution)
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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.algos.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.algos.html#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: 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 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> (single fraction) <br/></div> <div id='qty.sym.expr.algos-10.sentence-4' 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-msubsup MJXc-space3"><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-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;"></span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span><span 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></span></span> (unique symbolic constants) <br/></div> <div id='qty.sym.expr.algos-10.sentence-5' 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-mn MJXc-space3"><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-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</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;">1</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"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span> (positive exponents) <br/></div> <div id='qty.sym.expr.algos-10.sentence-6' 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-mn MJXc-space3"><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-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.298em;">x</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"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span> (non-redundant <span class='math'>1</span>s) <br/></div> —&nbsp;<i>end example</i>]</div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.algos.html#11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1261'>#</a></div><div class='texpara'><div id='qty.sym.expr.algos-11.sentence-1' class='sentence'><i >Returns</i>: <span class='math'><span class='mathalpha'>r</span></span> is mapped to the return type:
<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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.algos.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.algos.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.algos.html#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'><div class='marginalizedparent'><a class='marginalized' href='qty.sym.expr.algos.html#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><div id='qty.ref' class='section'><h2 ><a class='secnum' style='min-width:65pt'>5.4</a> Reference <a class='abbr_ref' href='qty.ref.html'>[qty.ref]</a></h2><div id='qty.ref.general' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.4.1</a> General <a class='abbr_ref' href='qty.ref.general.html'>[qty.ref.general]</a></h3><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.general.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1336'>#</a></div><div class='texpara'><div id='qty.ref.general-1.sentence-1' class='sentence'>Subclause <a href='#qty.ref' title='5.4&emsp;Reference'>[qty.<span class='shy'></span>ref]</a> specifies the components
for describing the reference of a quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-01">IEC 60050, 112-01-01</a>)<a class='hidden_link' href='#qty.ref.general-1.sentence-1'>.</a></div></div></div></div><div id='qty.dim' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.4.2</a> Dimension <a class='abbr_ref' href='qty.dim.html'>[qty.dim]</a></h3><div id='qty.dim.general' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.2.1</a> General <a class='abbr_ref' href='qty.dim.general.html'>[qty.dim.general]</a></h4><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.dim.general.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1344'>#</a></div><div class='texpara'><div id='qty.dim.general-1.sentence-1' class='sentence'>Subclause <a href='#qty.dim' title='5.4.2&emsp;Dimension'>[qty.<span class='shy'></span>dim]</a> specifies the components
for defining the dimension of a quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-11">IEC 60050, 112-01-11</a>)<a class='hidden_link' href='#qty.dim.general-1.sentence-1'>.</a></div></div></div></div><div id='qty.dim.concepts' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.2.2</a> Concepts <a class='abbr_ref' href='qty.dim.concepts.html'>[qty.dim.concepts]</a></h4><div class='texpara'><div class='itemdecl' id='qty.dim.concepts-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#qty.dim.concepts-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='concept:Dimension'><span id='lib:Dimension'><span class='texttt'>Dimension</span></span></span></a> <span class='operator'>=</span> <a class='index' id='conceptref:SymbolicConstant_____'></a><span class='texttt'><i >SymbolicConstant</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>T, <span class='texttt'><i >dimension-interface</i></span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >BaseDimension</i></span><a class='index' id='concept:BaseDimension'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension__________'><span class='texttt'>Dimension</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span><span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'>&lt;</span>T, base_dimension<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> D<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:DimensionOf' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='concept:DimensionOf'><span id='lib:DimensionOf'><span class='texttt'>DimensionOf</span></span></span></a> <span class='operator'>=</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension___________'><span class='texttt'>Dimension</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension____________'><span class='texttt'>Dimension</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>D<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span>T<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>=</span><span class='operator'>=</span> D<span class='parenthesis'>)</span>;
</code></div></div></div><div id='qty.dim.types' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.2.3</a> Types <a class='abbr_ref' href='qty.dim.types.html'>[qty.dim.types]</a></h4><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <span id='lib:base_dimension'><a class='hidden_link' href='#lib:base_dimension' title='5.4.2.3&emsp;Types&emsp;[qty.dim.types]'>base_dimension</a></span> <span class='operator'>:</span> <i >dimension-interface</i> <span class='curlybracket'>{</span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.dim.types.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1375'>#</a></div><div class='texpara'><div id='qty.dim.types-1.sentence-1' class='sentence'><span class='texttt'>base_<span class='shy'></span>dimension</span> is used
to define the dimension of a base quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-08">IEC 60050, 112-01-08</a>)<a class='hidden_link' href='#qty.dim.types-1.sentence-1'>.</a></div> <div id='qty.dim.types-1.sentence-2' class='sentence'><span class='texttt'>Symbol</span> is its symbolic representation<a class='hidden_link' href='#qty.dim.types-1.sentence-2'>.</a></div> <div id='qty.dim.types-example-1' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#qty.dim.types-example-1'>1</a></i>:&ensp;<span class='codeblock'><span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> dim_length <span class='keyword'>final</span> <span class='operator'>:</span> base_dimension<span class='anglebracket'>&lt;</span><span class='literal'>"L"</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span> dim_length;
</span> —&nbsp;<i>end example</i>]</div></div></div><div class='texpara'><span id='lib:derived_dimension'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:derived_dimension'>🔗</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><span class='keyword'>typename</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <i >derived-dimension-impl</i> <span class='comment'>// <i >exposition only</i></span>
<span class='operator'>:</span> <i >expr-fractions</i><span class='anglebracket'>&lt;</span><span class='keyword'>struct</span> dimension_one, Expr<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:SymbolicConstant______'></a><i >SymbolicConstant</i><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> derived_dimension <span class='keyword'>final</span> <span class='operator'>:</span> <i >dimension-interface</i>, <i >derived-dimension-impl</i><span class='anglebracket'>&lt;</span>Expr<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.dim.types.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1399'>#</a></div><div class='texpara'><div id='qty.dim.types-2.sentence-1' class='sentence'><span class='texttt'>derived_<span class='shy'></span>dimension</span> is used by the library
to represent the dimension of a derived quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-10">IEC 60050, 112-01-10</a>)<a class='hidden_link' href='#qty.dim.types-2.sentence-1'>.</a></div> <div id='qty.dim.types-example-2' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#qty.dim.types-example-2'>2</a></i>:&ensp;<span class='codeblock'><span class='keyword'>constexpr</span> <span class='keyword'>auto</span> dim_acceleration <span class='operator'>=</span> isq<span class='operator'>::</span>speed<span class='operator'>.</span>dimension <span class='operator'>/</span> isq<span class='operator'>::</span>dim_time;
<span class='keyword'>int</span> x <span class='operator'>=</span> dim_acceleration; <span class='comment'>// error: cannot construct from</span>
<span class='comment'>// <span class='tcode_in_codeblock'>derived_<span class='shy'></span>dimension&lt;isq&#x200b;::&#x200b;dim_<span class='shy'></span>length, per&lt;power&lt;isq&#x200b;::&#x200b;dim_<span class='shy'></span>time, 2&gt;&gt;&gt;</span></span>
</span> —&nbsp;<i>end example</i>]</div></div> <div id='qty.dim.types-2.sentence-2' class='sentence'>
A program that instantiates a specialization of <span class='texttt'>derived_<span class='shy'></span>dimension</span>
that is not a possible result of the library specifications
is ill-formed, no diagnostic required<a class='hidden_link' href='#qty.dim.types-2.sentence-2'>.</a></div></div><div class='texpara'><span id='lib:dimension_one_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:dimension_one_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>struct</span> dimension_one <span class='keyword'>final</span> <span class='operator'>:</span> <i >dimension-interface</i>, <i >derived-dimension-impl</i><span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.dim.types.html#3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1422'>#</a></div><div class='texpara'><div id='qty.dim.types-3.sentence-1' class='sentence'><span class='texttt'>dimension_<span class='shy'></span>one</span> represents the dimension of a quantity of dimension one (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-13">IEC 60050, 112-01-13</a>)<a class='hidden_link' href='#qty.dim.types-3.sentence-1'>.</a></div></div></div></div><div id='qty.dim.ops' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.2.4</a> Operations <a class='abbr_ref' href='qty.dim.ops.html'>[qty.dim.ops]</a></h4><div class='texpara'><span id='lib:dimension-interface'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:dimension-interface'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>struct</span> <i >dimension-interface</i> <span class='curlybracket'>{</span> <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension_____________'><span class='tcode_in_codeblock'>Dimension</span></span></a> Lhs, <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension______________'><span class='tcode_in_codeblock'>Dimension</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension_______________'><span class='tcode_in_codeblock'>Dimension</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension________________'><span class='tcode_in_codeblock'>Dimension</span></span></a> Lhs, <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension_________________'><span class='tcode_in_codeblock'>Dimension</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension__________________'><span class='tcode_in_codeblock'>Dimension</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension___________________'><span class='tcode_in_codeblock'>Dimension</span></span></a> Lhs, <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension____________________'><span class='tcode_in_codeblock'>Dimension</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='texpara'><div id='lib:Dimension,operator*'><div id='lib:operator*,Dimension'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,Dimension'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension_____________________'><span class='texttt'>Dimension</span></span></a> Lhs, <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension______________________'><span class='texttt'>Dimension</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension_______________________'><span class='texttt'>Dimension</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.dim.ops.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1452'>#</a></div><div class='texpara'><div id='qty.dim.ops-1.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='texttt'><i >expr-multiply</i></span><span class='anglebracket'>&lt;</span>derived_<span class='shy'></span>dimension, <span class='keyword'>struct</span> dimension_<span class='shy'></span>one<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>Lhs<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rhs<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.dim.ops-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Dimension,operator/'><div id='lib:operator/,Dimension'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator/,Dimension'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension________________________'><span class='texttt'>Dimension</span></span></a> Lhs, <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension_________________________'><span class='texttt'>Dimension</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension__________________________'><span class='texttt'>Dimension</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.dim.ops.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1464'>#</a></div><div class='texpara'><div id='qty.dim.ops-2.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='texttt'><i >expr-divide</i></span><span class='anglebracket'>&lt;</span>derived_<span class='shy'></span>dimension, <span class='keyword'>struct</span> dimension_<span class='shy'></span>one<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>Lhs<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rhs<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.dim.ops-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Dimension,operator=='><div id='lib:operator==,Dimension'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator==,Dimension'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension___________________________'><span class='texttt'>Dimension</span></span></a> Lhs, <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension____________________________'><span class='texttt'>Dimension</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.dim.ops.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1476'>#</a></div><div class='texpara'><div id='qty.dim.ops-3.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>same_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>Lhs, Rhs<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.dim.ops-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Dimension,inverse'><div id='lib:inverse,Dimension'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:inverse,Dimension'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension_____________________________'><span class='texttt'>Dimension</span></span></a> <span class='keyword'>auto</span> inverse<span class='parenthesis'>(</span><a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension______________________________'><span class='texttt'>Dimension</span></span></a> <span class='keyword'>auto</span> d<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.dim.ops.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1487'>#</a></div><div class='texpara'><div id='qty.dim.ops-4.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>dimension_<span class='shy'></span>one <span class='operator'>/</span> d</span><a class='hidden_link' href='#qty.dim.ops-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Dimension,pow'><div id='lib:pow,Dimension'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:pow,Dimension'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>intmax_t Num, std<span class='operator'>::</span>intmax_t Den <span class='operator'>=</span> <span class='literal'>1</span>, <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension_______________________________'><span class='texttt'>Dimension</span></span></a> D<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> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension________________________________'><span class='texttt'>Dimension</span></span></a> <span class='keyword'>auto</span> pow<span class='parenthesis'>(</span>D d<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.dim.ops.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1500'>#</a></div><div class='texpara'><div id='qty.dim.ops-5.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='texttt'><i >expr-pow</i></span><span class='anglebracket'>&lt;</span>Num, Den, derived_<span class='shy'></span>dimension, <span class='keyword'>struct</span> dimension_<span class='shy'></span>one<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>d<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.dim.ops-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Dimension,sqrt'><div id='lib:sqrt,Dimension'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:sqrt,Dimension'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension_________________________________'><span class='texttt'>Dimension</span></span></a> <span class='keyword'>auto</span> sqrt<span class='parenthesis'>(</span><a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension__________________________________'><span class='texttt'>Dimension</span></span></a> <span class='keyword'>auto</span> d<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.dim.ops.html#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1511'>#</a></div><div class='texpara'><div id='qty.dim.ops-6.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>pow<span class='anglebracket'>&lt;</span><span class='literal'>1</span>, <span class='literal'>2</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>d<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.dim.ops-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Dimension,cbrt'><div id='lib:cbrt,Dimension'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:cbrt,Dimension'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension___________________________________'><span class='texttt'>Dimension</span></span></a> <span class='keyword'>auto</span> cbrt<span class='parenthesis'>(</span><a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension____________________________________'><span class='texttt'>Dimension</span></span></a> <span class='keyword'>auto</span> d<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.dim.ops.html#7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1522'>#</a></div><div class='texpara'><div id='qty.dim.ops-7.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>pow<span class='anglebracket'>&lt;</span><span class='literal'>1</span>, <span class='literal'>3</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>d<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.dim.ops-7.sentence-1'>.</a></div></div></div></div></div><div id='qty.dim.sym.fmt' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.2.5</a> Symbol formatting <a class='abbr_ref' href='qty.dim.sym.fmt.html'>[qty.dim.sym.fmt]</a></h4><div class='texpara'><div id='lib:Dimension,dimension_symbol_to'><div id='lib:dimension_symbol_to,Dimension'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:dimension_symbol_to,Dimension'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> CharT <span class='operator'>=</span> <span class='keyword'>char</span>, std<span class='operator'>::</span>output_iterator<span class='anglebracket'>&lt;</span>CharT<span class='anglebracket'>&gt;</span> Out, <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension_____________________________________'><span class='texttt'>Dimension</span></span></a> D<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> Out dimension_symbol_to<span class='parenthesis'>(</span>Out out, D d, <span class='keyword'>const</span> dimension_symbol_formatting<span class='operator'>&amp;</span> fmt <span class='operator'>=</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.dim.sym.fmt.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1536'>#</a></div><div class='texpara'><div id='qty.dim.sym.fmt-1.sentence-1' class='sentence'><i >Effects</i>: TBD<a class='hidden_link' href='#qty.dim.sym.fmt-1.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.dim.sym.fmt.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1540'>#</a></div><div class='texpara'><div id='qty.dim.sym.fmt-2.sentence-1' class='sentence'><i >Returns</i>: TBD<a class='hidden_link' href='#qty.dim.sym.fmt-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Dimension,dimension_symbol'><div id='lib:dimension_symbol,Dimension'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:dimension_symbol,Dimension'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>dimension_symbol_formatting fmt <span class='operator'>=</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>, <span class='keyword'>typename</span> CharT <span class='operator'>=</span> <span class='keyword'>char</span>, <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension______________________________________'><span class='texttt'>Dimension</span></span></a> D<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> std<span class='operator'>::</span>string_view dimension_symbol<span class='parenthesis'>(</span>D<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.dim.sym.fmt.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1552'>#</a></div><div class='texpara'><div id='qty.dim.sym.fmt-3.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'>TBD<span class='operator'>.</span>
</span></div></div></div></div></div></div><div id='qty.spec' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.4.3</a> Quantity specification <a class='abbr_ref' href='qty.spec.html'>[qty.spec]</a></h3><div id='qty.spec.general' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.3.1</a> General <a class='abbr_ref' href='qty.spec.general.html'>[qty.spec.general]</a></h4><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.spec.general.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1564'>#</a></div><div class='texpara'><div id='qty.spec.general-1.sentence-1' class='sentence'>Subclause <a href='#qty.spec' title='5.4.3&emsp;Quantity specification'>[qty.<span class='shy'></span>spec]</a> specifies the components
for defining a quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-01">IEC 60050, 112-01-01</a>)<a class='hidden_link' href='#qty.spec.general-1.sentence-1'>.</a></div></div></div></div><div id='qty.spec.concepts' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.3.2</a> Concepts <a class='abbr_ref' href='qty.spec.concepts.html'>[qty.spec.concepts]</a></h4><div class='texpara'><div class='itemdecl' id='qty.spec.concepts-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#qty.spec.concepts-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='concept:QuantitySpec'><span id='lib:QuantitySpec'><span class='texttt'>QuantitySpec</span></span></span></a> <span class='operator'>=</span> <a class='index' id='conceptref:SymbolicConstant_______'></a><span class='texttt'><i >SymbolicConstant</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>T, <span class='texttt'><i >quantity-spec-interface</i></span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >QuantityKindSpec</i></span><a class='index' id='concept:QuantityKindSpec'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='texttt'><i >is-specialization-of</i></span><span class='anglebracket'>&lt;</span>T, kind_of_<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >NamedQuantitySpec</i></span><a class='index' id='concept:NamedQuantitySpec'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec______________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'>&lt;</span>T, quantity_spec<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span><span class='operator'>!</span><a class='index' id='conceptref:QuantityKindSpec____'></a><span class='texttt'><i >QuantityKindSpec</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >DerivedQuantitySpec</i></span><a class='index' id='concept:DerivedQuantitySpec'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_______________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span><span class='texttt'><i >is-specialization-of</i></span><span class='anglebracket'>&lt;</span>T, derived_quantity_spec<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
<span class='parenthesis'>(</span><a class='index' id='conceptref:QuantityKindSpec_____'></a><span class='texttt'><i >QuantityKindSpec</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='texttt'><i >is-specialization-of</i></span><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>T<span class='operator'>::</span><span class='texttt'><i >quantity-spec</i></span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>, derived_quantity_spec<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>auto</span> Child, <span class='keyword'>auto</span> Parent<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >ChildQuantitySpecOf</i></span><a class='index' id='concept:ChildQuantitySpecOf'></a> <span class='operator'>=</span> <span class='parenthesis'>(</span><span class='texttt'><i >is-child-of</i></span><span class='parenthesis'>(</span>Child, Parent<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'>auto</span> To, <span class='keyword'>auto</span> From<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >NestedQuantityKindSpecOf</i></span><a class='index' id='concept:NestedQuantityKindSpecOf'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>From<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>To<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span>get_kind<span class='parenthesis'>(</span>From<span class='parenthesis'>)</span> <span class='operator'>!</span><span class='operator'>=</span> get_kind<span class='parenthesis'>(</span>To<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:ChildQuantitySpecOf'></a><span class='texttt'><i >ChildQuantitySpecOf</i></span><span class='anglebracket'>&lt;</span>To, get_kind<span class='parenthesis'>(</span>From<span class='parenthesis'>)</span><span class='operator'>.</span><span class='texttt'><i >quantity-spec</i></span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>auto</span> From, <span class='keyword'>auto</span> To<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >QuantitySpecConvertibleTo</i></span><a class='index' id='concept:QuantitySpecConvertibleTo'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>From<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>To<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> implicitly_convertible<span class='parenthesis'>(</span>From, To<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>auto</span> From, <span class='keyword'>auto</span> To<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >QuantitySpecExplicitlyConvertibleTo</i></span><a class='index' id='concept:QuantitySpecExplicitlyConvertibleTo'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec____________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>From<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>To<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> explicitly_convertible<span class='parenthesis'>(</span>From, To<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>auto</span> From, <span class='keyword'>auto</span> To<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >QuantitySpecCastableTo</i></span><a class='index' id='concept:QuantitySpecCastableTo'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec______________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>From<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_______________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>To<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> castable<span class='parenthesis'>(</span>From, To<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:QuantitySpecOf' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='concept:QuantitySpecOf'><span id='lib:QuantitySpecOf'><span class='texttt'>QuantitySpecOf</span></span></span></a> <span class='operator'>=</span>
<a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec________________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_________________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>QS<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:QuantitySpecConvertibleTo'></a><span class='texttt'><i >QuantitySpecConvertibleTo</i></span><span class='anglebracket'>&lt;</span>T<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, QS<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='operator'>!</span><a class='index' id='conceptref:NestedQuantityKindSpecOf'></a><span class='texttt'><i >NestedQuantityKindSpecOf</i></span><span class='anglebracket'>&lt;</span>T<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, QS<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span><a class='index' id='conceptref:QuantityKindSpec______'></a><span class='texttt'><i >QuantityKindSpec</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span> <span class='operator'>!</span><a class='index' id='conceptref:NestedQuantityKindSpecOf_'></a><span class='texttt'><i >NestedQuantityKindSpecOf</i></span><span class='anglebracket'>&lt;</span>QS, T<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >QSProperty</i></span><a class='index' id='concept:QSProperty'></a> <span class='operator'>=</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div><div id='qty.spec.types' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.3.3</a> Types <a class='abbr_ref' href='qty.spec.types.html'>[qty.spec.types]</a></h4><div id='named.qty' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.3.3.1</a> Named <a class='abbr_ref' href='named.qty.html'>[named.qty]</a></h4><div class='texpara'><span id='lib:quantity_spec'><span id='lib:is_kind_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:is_kind_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>struct</span> is_kind <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:BaseDimension_'></a><i >BaseDimension</i> <span class='keyword'>auto</span> Dim, <a class='index' id='conceptref:QSProperty____'></a><i >QSProperty</i> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> quantity_spec<span class='anglebracket'>&lt;</span>Dim, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span> <span class='operator'>:</span> <i >quantity-spec-interface</i> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> quantity_spec;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a class='index' id='conceptref:BaseDimension__'></a><i >BaseDimension</i> <span class='keyword'>auto</span> dimension <span class='operator'>=</span> Dim;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> quantity_character character <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:DerivedQuantitySpec__'></a><i >DerivedQuantitySpec</i> <span class='keyword'>auto</span> Eq, <a class='index' id='conceptref:QSProperty_____'></a><i >QSProperty</i> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> quantity_spec<span class='anglebracket'>&lt;</span>Eq, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span> <span class='operator'>:</span> <i >quantity-spec-interface</i> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> quantity_spec;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >equation</i> <span class='operator'>=</span> Eq;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension_______________________________________'><span class='tcode_in_codeblock'>Dimension</span></span></a> <span class='keyword'>auto</span> dimension <span class='operator'>=</span> Eq<span class='operator'>.</span>dimension;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> quantity_character character <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:NamedQuantitySpec__'></a><i >NamedQuantitySpec</i> <span class='keyword'>auto</span> QS, <a class='index' id='conceptref:QSProperty______'></a><i >QSProperty</i> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> quantity_spec<span class='anglebracket'>&lt;</span>QS, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span> <span class='operator'>:</span> <i >quantity-spec-interface</i> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> quantity_spec;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >parent</i> <span class='operator'>=</span> QS;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >equation</i> <span class='operator'>=</span> <i >parent</i><span class='operator'>.</span><i >equation</i>; <span class='comment'>// <i >exposition only</i>, present only</span>
<span class='comment'>// if the <span class='textsf'><i >qualified-id</i></span> <span class='tcode_in_codeblock'><span class='tcode_in_codeblock'><i >parent</i></span>.<span class='tcode_in_codeblock'><i >equation</i></span></span> is valid and denotes an object</span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension________________________________________'><span class='tcode_in_codeblock'>Dimension</span></span></a> <span class='keyword'>auto</span> dimension <span class='operator'>=</span> <i >parent</i><span class='operator'>.</span>dimension;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> quantity_character character <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:NamedQuantitySpec___'></a><i >NamedQuantitySpec</i> <span class='keyword'>auto</span> QS, <a class='index' id='conceptref:DerivedQuantitySpec___'></a><i >DerivedQuantitySpec</i> <span class='keyword'>auto</span> Eq, <a class='index' id='conceptref:QSProperty_______'></a><i >QSProperty</i> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Args<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantitySpecExplicitlyConvertibleTo'></a><i >QuantitySpecExplicitlyConvertibleTo</i><span class='anglebracket'>&lt;</span>Eq, QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> quantity_spec<span class='anglebracket'>&lt;</span>QS, Eq, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span> <span class='operator'>:</span> <i >quantity-spec-interface</i> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> quantity_spec;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >parent</i> <span class='operator'>=</span> QS;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >equation</i> <span class='operator'>=</span> Eq;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension_________________________________________'><span class='tcode_in_codeblock'>Dimension</span></span></a> <span class='keyword'>auto</span> dimension <span class='operator'>=</span> <i >parent</i><span class='operator'>.</span>dimension;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> quantity_character character <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='named.qty.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1669'>#</a></div><div class='texpara'><div id='named.qty-1.sentence-1' class='sentence'>A <a class='hidden_link' href='#def:quantity,named' title='5.4.3.3.1&emsp;Named&emsp;[named.qty]'><span id='def:quantity,named'><i >named quantity</i></span></a> is a type that models <a class='index' id='conceptref:NamedQuantitySpec____'></a><span class='texttt'><i >NamedQuantitySpec</i></span><a class='hidden_link' href='#named.qty-1.sentence-1'>.</a></div> <div id='named.qty-1.sentence-2' class='sentence'>A specialization of <span class='texttt'>quantity_<span class='shy'></span>spec</span> is used as a base type when defining a named quantity<a class='hidden_link' href='#named.qty-1.sentence-2'>.</a></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='named.qty.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1673'>#</a></div><div class='texpara'><div id='named.qty-2.sentence-1' class='sentence'>In the following descriptions, let <span class='texttt'>Q</span> be a named quantity defined with an alluded signature<a class='hidden_link' href='#named.qty-2.sentence-1'>.</a></div> <div id='named.qty-2.sentence-2' class='sentence'>The identifier of <span class='texttt'>Q</span> represents its quantity name (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-02">IEC 60050, 112-01-02</a>)<a class='hidden_link' href='#named.qty-2.sentence-2'>.</a></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='named.qty.html#3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1677'>#</a></div><div class='texpara'><div id='named.qty-3.sentence-1' class='sentence'>Let <span class='texttt'>Ch</span> be an enumerator value of <span class='texttt'>quantity_<span class='shy'></span>character</span><a class='hidden_link' href='#named.qty-3.sentence-1'>.</a></div> <div id='named.qty-3.sentence-2' class='sentence'>The possible arguments to <span class='texttt'>quantity_<span class='shy'></span>spec</span> are
<ul class='itemize'><li id='named.qty-3.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#named.qty-3.1'>(3.1)</a></div><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">a base quantity dimension</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">Ch</span></span></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mstyle" style="font-size: 113.1%; color: black;"><span class="mjx-mrow" style="font-size: 88.4%;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span>,</li><li id='named.qty-3.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#named.qty-3.2'>(3.2)</a></div><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">a quantity calculus</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">Ch</span></span></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mstyle" style="font-size: 113.1%; color: black;"><span class="mjx-mrow" style="font-size: 88.4%;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span>,</li><li id='named.qty-3.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#named.qty-3.3'>(3.3)</a></div><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">a named quantity</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">Ch</span></span></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mstyle" style="font-size: 113.1%; color: black;"><span class="mjx-mrow" style="font-size: 88.4%;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><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.372em;">is_kind</span></span></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.22em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mstyle" style="font-size: 113.1%; color: black;"><span class="mjx-mrow" style="font-size: 88.4%;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span>, and</li><li id='named.qty-3.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#named.qty-3.4'>(3.4)</a></div><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">a named quantity</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mtext MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">a quantity calculus</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.446em; padding-bottom: 0.298em;">Ch</span></span></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mstyle" style="font-size: 113.1%; color: black;"><span class="mjx-mrow" style="font-size: 88.4%;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><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.372em;">is_kind</span></span></span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.22em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mstyle" style="font-size: 113.1%; color: black;"><span class="mjx-mrow" style="font-size: 88.4%;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span><a class='hidden_link' href='#named.qty-3.sentence-2'>.</a></li></ul></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='named.qty.html#4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1691'>#</a></div><div class='texpara'><div id='named.qty-4.sentence-1' class='sentence'>If the first argument is a base quantity dimension,
then <span class='texttt'>Q</span> is that base quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-08">IEC 60050, 112-01-08</a>)<a class='hidden_link' href='#named.qty-4.sentence-1'>.</a></div> <div id='named.qty-4.sentence-2' class='sentence'>If an argument is a quantity calculus (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-30">IEC 60050, 112-01-30</a>) <i >C</i>,
then <span class='texttt'>Q</span> is implicitly convertible from <i >C</i><a class='hidden_link' href='#named.qty-4.sentence-2'>.</a></div> <div id='named.qty-4.sentence-3' class='sentence'>If the first argument is a named quantity,
then <span class='texttt'>Q</span> is of its kind (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-04">IEC 60050, 112-01-04</a>)<a class='hidden_link' href='#named.qty-4.sentence-3'>.</a></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='named.qty.html#5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1699'>#</a></div><div class='texpara'><div id='named.qty-5.sentence-1' class='sentence'>The member <span class='texttt'>character</span> represents
the set of the numerical value of <span class='texttt'>Q</span> (<a href='#qty.char.traits' title='5.5.2.2&emsp;Quantity character'>[qty.<span class='shy'></span>char.<span class='shy'></span>traits]</a>)
and is equal to
<ul class='itemize'><li id='named.qty-5.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#named.qty-5.1'>(5.1)</a></div><span class='texttt'>Ch</span> if specified,</li><li id='named.qty-5.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#named.qty-5.2'>(5.2)</a></div>otherwise, <span class='texttt'>quantity_<span class='shy'></span>character<span class='operator'>&#x200b;::&#x200b;</span>real_<span class='shy'></span>scalar</span> for the first signature, and</li><li id='named.qty-5.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#named.qty-5.3'>(5.3)</a></div>otherwise, <span class='texttt'><span class='parenthesis'>(</span>BC<span class='parenthesis'>)</span><span class='operator'>.</span>character</span>,
where <span class='texttt'>BC</span> is the argument preceding <span class='texttt'>Ch</span> in the signatures above<a class='hidden_link' href='#named.qty-5.sentence-1'>.</a></li></ul></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='named.qty.html#6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1713'>#</a></div><div class='texpara'><div id='named.qty-6.sentence-1' class='sentence'><span class='texttt'>is_<span class='shy'></span>kind</span> specifies <span class='texttt'>Q</span> to start a new hierarchy tree of a kind<a class='hidden_link' href='#named.qty-6.sentence-1'>.</a></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='named.qty.html#7'>7</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1716'>#</a></div><div class='texpara'><div id='named.qty-7.sentence-1' class='sentence'>Optional arguments may appear in any order<a class='hidden_link' href='#named.qty-7.sentence-1'>.</a></div></div></div><div class='para nonNormativeOnly'><div class='marginalizedparent'><a class='marginalized' href='named.qty.html#8'>8</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1719'>#</a></div><div class='texpara'><div id='named.qty-example-1' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#named.qty-example-1'>1</a></i>:&ensp;<span class='codeblock'><span class='comment'>// The first signature defines a base quantity.</span>
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> length <span class='keyword'>final</span> <span class='operator'>:</span> quantity_spec<span class='anglebracket'>&lt;</span>dim_length<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>}</span> length; <span class='comment'>// Length is a base quantity.</span>
<span class='comment'>// The second signature defines a derived quantity.</span>
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> area <span class='keyword'>final</span> <span class='operator'>:</span> quantity_spec<span class='anglebracket'>&lt;</span>pow<span class='anglebracket'>&lt;</span><span class='literal'>2</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>length<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>}</span> area; <span class='comment'>// An area equals length by length.</span>
<span class='comment'>// The third and fourth signatures add a leaf to a hierarchy of kinds.</span>
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> width <span class='keyword'>final</span> <span class='operator'>:</span> quantity_spec<span class='anglebracket'>&lt;</span>length<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>}</span> width; <span class='comment'>// Width is a kind of length.</span>
<span class='comment'>// The fourth signature also refines the calculus required for implicit conversions.</span>
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> angular_measure <span class='keyword'>final</span> <span class='operator'>:</span>
quantity_spec<span class='anglebracket'>&lt;</span>dimensionless, arc_length <span class='operator'>/</span> radius, is_kind<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>}</span> angular_measure; <span class='comment'>// Requires an arc length per radius, not just any quantity of dimension one.</span>
</span> —&nbsp;<i>end example</i>]</div></div></div></div></div><div id='derived.qty' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.3.3.2</a> Derived <a class='abbr_ref' href='derived.qty.html'>[derived.qty]</a></h4><div class='texpara'><span id='lib:derived_quantity_spec'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:derived_quantity_spec'>🔗</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><i >NamedQuantitySpec</i><a class='index' id='concept:NamedQuantitySpec_'></a> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>using</span> <i >to-dimension</i> <span class='operator'>=</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>Q<span class='operator'>::</span>dimension<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><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <i >derived-quantity-spec-impl</i> <span class='operator'>:</span> <span class='comment'>// <i >exposition only</i></span>
<i >quantity-spec-interface</i>,
<i >expr-fractions</i><span class='anglebracket'>&lt;</span><span class='keyword'>struct</span> dimensionless, Expr<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> <i >derived-quantity-spec-impl</i>;
<span class='keyword'>using</span> <i >base</i> <span class='operator'>=</span> <i >expr-fractions</i><span class='anglebracket'>&lt;</span><span class='keyword'>struct</span> dimensionless, Expr<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension__________________________________________'><span class='tcode_in_codeblock'>Dimension</span></span></a> <span class='keyword'>auto</span> dimension <span class='operator'>=</span>
<i >expr-map</i><span class='anglebracket'>&lt;</span><i >to-dimension</i>, derived_dimension, <span class='keyword'>struct</span> dimension_one<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><i >base</i><span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> quantity_character character <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:SymbolicConstant________'></a><i >SymbolicConstant</i><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> derived_quantity_spec <span class='keyword'>final</span> <span class='operator'>:</span> <i >derived-quantity-spec-impl</i><span class='anglebracket'>&lt;</span>Expr<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='derived.qty.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1768'>#</a></div><div class='texpara'><div id='derived.qty-1.sentence-1' class='sentence'><span class='texttt'>derived_<span class='shy'></span>quantity_<span class='shy'></span>spec</span> is used by the library
to represent the result of a quantity calculus not equal to a named quantity<a class='hidden_link' href='#derived.qty-1.sentence-1'>.</a></div> <div id='derived.qty-example-1' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#derived.qty-example-1'>1</a></i>:&ensp;<span class='codeblock'><span class='keyword'>constexpr</span> <span class='keyword'>auto</span> area <span class='operator'>=</span> pow<span class='anglebracket'>&lt;</span><span class='literal'>2</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>isq<span class='operator'>::</span>length<span class='parenthesis'>)</span>;
<span class='keyword'>int</span> x <span class='operator'>=</span> area; <span class='comment'>// error: cannot construct from <span class='tcode_in_codeblock'>derived_<span class='shy'></span>quantity_<span class='shy'></span>spec&lt;power&lt;isq&#x200b;::&#x200b;length, 2&gt;&gt;</span></span>
</span> —&nbsp;<i>end example</i>]</div></div> <div id='derived.qty-1.sentence-2' class='sentence'>
A program that instantiates a specialization of <span class='texttt'>derived_<span class='shy'></span>quantity_<span class='shy'></span>spec</span>
that is not a possible result of the library specifications
is ill-formed, no diagnostic required<a class='hidden_link' href='#derived.qty-1.sentence-2'>.</a></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='derived.qty.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1781'>#</a></div><div class='texpara'><div id='derived.qty-2.sentence-1' class='sentence'>Let
<ul class='itemize'><li id='derived.qty-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#derived.qty-2.1'>(2.1)</a></div><span class='texttt'>Nums</span> and <span class='texttt'>Dens</span>
be packs denoting the template arguments of
<span class='texttt'><span class='texttt'><i >base</i></span><span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >nums</i></span></span> and <span class='texttt'><span class='texttt'><i >base</i></span><span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >dens</i></span></span>, respectively,</li><li id='derived.qty-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#derived.qty-2.2'>(2.2)</a></div><span class='texttt'><i >QUANTITY-CHARACTER-OF</i><span class='parenthesis'>(</span>Pack<span class='parenthesis'>)</span></span> be
<span class='codeblock'>std<span class='operator'>::</span>max<span class='parenthesis'>(</span><span class='curlybracket'>{</span>quantity_character<span class='operator'>::</span>real_scalar, <i >expr-type</i><span class='anglebracket'>&lt;</span>Pack<span class='anglebracket'>&gt;</span><span class='operator'>::</span>character<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>
</span>
and</li><li id='derived.qty-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#derived.qty-2.3'>(2.3)</a></div><span class='texttt'>num_<span class='shy'></span>char</span> be <span class='texttt'><i >QUANTITY-CHARACTER-OF</i><span class='parenthesis'>(</span>Nums<span class='parenthesis'>)</span></span> and
<span class='texttt'>den_<span class='shy'></span>char</span> be <span class='texttt'><i >QUANTITY-CHARACTER-OF</i><span class='parenthesis'>(</span>Dens<span class='parenthesis'>)</span></span><a class='hidden_link' href='#derived.qty-2.sentence-1'>.</a></li></ul></div> <div id='derived.qty-2.sentence-2' class='sentence'>
The member <span class='texttt'>character</span> is equal to
<span class='texttt'>quantity_<span class='shy'></span>character<span class='operator'>&#x200b;::&#x200b;</span>real_<span class='shy'></span>scalar</span> if <span class='texttt'>num_<span class='shy'></span>char <span class='operator'>=</span><span class='operator'>=</span> den_<span class='shy'></span>char</span> is <span class='texttt'><span class='literal'>true</span></span>, and
<span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>max<span class='parenthesis'>(</span>num_<span class='shy'></span>char, den_<span class='shy'></span>char<span class='parenthesis'>)</span></span> otherwise<a class='hidden_link' href='#derived.qty-2.sentence-2'>.</a></div></div></div></div><div id='dimless.qty' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.3.3.3</a> Base quantity of dimension one <a class='abbr_ref' href='dimless.qty.html'>[dimless.qty]</a></h4><div class='texpara'><span id='lib:dimensionless_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:dimensionless_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>struct</span> dimensionless <span class='keyword'>final</span> <span class='operator'>:</span> quantity_spec<span class='anglebracket'>&lt;</span>derived_quantity_spec<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='dimless.qty.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1813'>#</a></div><div class='texpara'><div id='dimless.qty-1.sentence-1' class='sentence'><span class='texttt'>dimensionless</span> represents the base quantity of dimension one (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-13">IEC 60050, 112-01-13</a>)<a class='hidden_link' href='#dimless.qty-1.sentence-1'>.</a></div></div></div></div><div id='kind.of.qty' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.3.3.4</a> Kind of <a class='abbr_ref' href='kind.of.qty.html'>[kind.of.qty]</a></h4><div class='texpara'><span id='lib:kind_of_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:kind_of_'>🔗</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><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a class='index' id='conceptref:QuantityKindSpec_______'></a><i >QuantityKindSpec</i><span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span><i >get-kind-tree-root</i><span class='parenthesis'>(</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>
<span class='keyword'>struct</span> kind_of_ <span class='keyword'>final</span> <span class='operator'>:</span> Q<span class='operator'>::</span><i >base-type</i> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> kind_of_; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >quantity-spec</i> <span class='operator'>=</span> Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span>; <span class='comment'>// <i >exposition only</i></span>
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='kind.of.qty.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1832'>#</a></div><div class='texpara'><div id='kind.of.qty-1.sentence-1' class='sentence'><span class='texttt'>kind_<span class='shy'></span>of<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span></span> represents a kind of quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-04">IEC 60050, 112-01-04</a>) <span class='texttt'>Q</span><a class='hidden_link' href='#kind.of.qty-1.sentence-1'>.</a></div></div></div></div></div><div id='qty.spec.utils' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.3.4</a> Utilities <a class='abbr_ref' href='qty.spec.utils.html'>[qty.spec.utils]</a></h4><div class='texpara'><div id='lib:clone-kind-of,QuantitySpec'><div id='lib:QuantitySpec,clone-kind-of'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:QuantitySpec,clone-kind-of'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec____________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> From, <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec______________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> <span class='texttt'><i >clone-kind-of</i></span><span class='parenthesis'>(</span>Q q<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.spec.utils.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1844'>#</a></div><div class='texpara'><div id='qty.spec.utils-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><span class='parenthesis'>(</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:QuantityKindSpec________'></a><i >QuantityKindSpec</i><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>From<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> kind_of<span class='anglebracket'>&lt;</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>else</span>
<span class='keyword'>return</span> q;
</span></div></div></div></div><div class='texpara'><div id='lib:remove-kind,QuantitySpec'><div id='lib:QuantitySpec,remove-kind'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:QuantitySpec,remove-kind'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_______________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >remove-kind</i></span><span class='parenthesis'>(</span>Q q<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.spec.utils.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1862'>#</a></div><div class='texpara'><div id='qty.spec.utils-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><a class='index' id='conceptref:QuantityKindSpec_________'></a><i >QuantityKindSpec</i><span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> Q<span class='operator'>::</span><i >quantity-spec</i>;
<span class='keyword'>else</span>
<span class='keyword'>return</span> q;
</span></div></div></div></div><div class='texpara'><div id='lib:make-reference,Unit'><div id='lib:Unit,make-reference'><div id='lib:make-reference,QuantitySpec'><div id='lib:QuantitySpec,make-reference'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:QuantitySpec,make-reference'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> QS, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit__________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit________'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'>&lt;</span>U<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span> <a href='#concept:UnitOf' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:UnitOf'><span class='texttt'>UnitOf</span></span></a><span class='anglebracket'>&lt;</span>U, QS<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference___________________'><span class='texttt'>Reference</span></span></a> <span class='keyword'>auto</span> <span class='texttt'><i >make-reference</i></span><span class='parenthesis'>(</span>QS, U u<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.spec.utils.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1882'>#</a></div><div class='texpara'><div id='qty.spec.utils-3.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><span class='keyword'>requires</span> <span class='curlybracket'>{</span> <span class='keyword'>requires</span> get_quantity_spec<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> QS<span class='curlybracket'>{</span><span class='curlybracket'>}</span>; <span class='curlybracket'>}</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> u;
<span class='keyword'>else</span>
<span class='keyword'>return</span> reference<span class='anglebracket'>&lt;</span>QS, U<span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
</span></div></div></div></div></div><div id='qty.spec.ops' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.3.5</a> Operations <a class='abbr_ref' href='qty.spec.ops.html'>[qty.spec.ops]</a></h4><div class='texpara'><span id='lib:quantity-spec-interface'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity-spec-interface'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>struct</span> <i >quantity-spec-interface</i> <span class='curlybracket'>{</span> <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Lhs, <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec____________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Lhs, <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec______________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Self, <a href='#concept:UnitOf' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:UnitOf_'><span class='tcode_in_codeblock'>UnitOf</span></span></a><span class='anglebracket'>&lt;</span>Self<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference____________________'><span class='tcode_in_codeblock'>Reference</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span><span class='keyword'>this</span> Self self, U u<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Self, <span class='keyword'>typename</span> FwdQ, <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity__________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantitySpecExplicitlyConvertibleTo_'></a><i >QuantitySpecExplicitlyConvertibleTo</i><span class='anglebracket'>&lt;</span>Q<span class='operator'>::</span>quantity_spec, Self<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity___________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span><span class='keyword'>this</span> Self self, FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_______________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Lhs, <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec________________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='texpara'><div id='lib:QuantitySpec,operator*'><div id='lib:operator*,QuantitySpec'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,QuantitySpec'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Lhs, <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.spec.ops.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1927'>#</a></div><div class='texpara'><div id='qty.spec.ops-1.sentence-1' class='sentence'><i >Returns</i>: <span class='codeblock'><i >clone-kind-of</i><span class='anglebracket'>&lt;</span>Lhs<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rhs<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><i >expr-multiply</i><span class='anglebracket'>&lt;</span>derived_quantity_spec, <span class='keyword'>struct</span> dimensionless<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>
<i >remove-kind</i><span class='parenthesis'>(</span>lhs<span class='parenthesis'>)</span>, <i >remove-kind</i><span class='parenthesis'>(</span>rhs<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
</span></div></div></div></div><div class='texpara'><div id='lib:QuantitySpec,operator/'><div id='lib:operator/,QuantitySpec'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator/,QuantitySpec'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec____________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Lhs, <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec______________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.spec.ops.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1942'>#</a></div><div class='texpara'><div id='qty.spec.ops-2.sentence-1' class='sentence'><i >Returns</i>: <span class='codeblock'><i >clone-kind-of</i><span class='anglebracket'>&lt;</span>Lhs<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rhs<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><i >expr-divide</i><span class='anglebracket'>&lt;</span>derived_quantity_spec, <span class='keyword'>struct</span> dimensionless<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>
<i >remove-kind</i><span class='parenthesis'>(</span>lhs<span class='parenthesis'>)</span>, <i >remove-kind</i><span class='parenthesis'>(</span>rhs<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
</span></div></div></div></div><div class='texpara'><div id='lib:QuantitySpec,operator[]'><div id='lib:operator[],QuantitySpec'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator%5b%5d,QuantitySpec'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Self, <a href='#concept:UnitOf' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:UnitOf__'><span class='texttt'>UnitOf</span></span></a><span class='anglebracket'>&lt;</span>Self<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_____________________'><span class='texttt'>Reference</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='squarebracket'>[</span><span class='squarebracket'>]</span><span class='parenthesis'>(</span><span class='keyword'>this</span> Self self, U u<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.spec.ops.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1957'>#</a></div><div class='texpara'><div id='qty.spec.ops-3.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='texttt'><i >make-reference</i></span><span class='parenthesis'>(</span>self, u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.spec.ops-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:QuantitySpec,operator()'><div id='lib:operator(),QuantitySpec'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator(),QuantitySpec'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Self, <span class='keyword'>typename</span> FwdQ, <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity____________________'><span class='texttt'>Quantity</span></span></a> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantitySpecExplicitlyConvertibleTo__'></a><span class='texttt'><i >QuantitySpecExplicitlyConvertibleTo</i></span><span class='anglebracket'>&lt;</span>Q<span class='operator'>::</span>quantity_spec, Self<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_____________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span><span class='keyword'>this</span> Self self, FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.spec.ops.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1970'>#</a></div><div class='texpara'><div id='qty.spec.ops-4.sentence-1' class='sentence'><i >Returns</i>: <span class='codeblock'>quantity<span class='curlybracket'>{</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span><span class='operator'>.</span><i >numerical-value</i>, <i >make-reference</i><span class='parenthesis'>(</span>self, Q<span class='operator'>::</span>unit<span class='parenthesis'>)</span><span class='curlybracket'>}</span>
</span></div></div></div></div><div class='texpara'><div id='lib:QuantitySpec,operator=='><div id='lib:operator==,QuantitySpec'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator==,QuantitySpec'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_______________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Lhs, <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.spec.ops.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1984'>#</a></div><div class='texpara'><div id='qty.spec.ops-5.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>same_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>Lhs, Rhs<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.spec.ops-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:QuantitySpec,inverse'><div id='lib:inverse,QuantitySpec'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:inverse,QuantitySpec'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> inverse<span class='parenthesis'>(</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> q<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.spec.ops.html#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L1995'>#</a></div><div class='texpara'><div id='qty.spec.ops-6.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>dimensionless <span class='operator'>/</span> q</span><a class='hidden_link' href='#qty.spec.ops-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:QuantitySpec,pow'><div id='lib:pow,QuantitySpec'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:pow,QuantitySpec'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>intmax_t Num, std<span class='operator'>::</span>intmax_t Den <span class='operator'>=</span> <span class='literal'>1</span>, <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Q<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> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec____________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> pow<span class='parenthesis'>(</span>Q q<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.spec.ops.html#7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2008'>#</a></div><div class='texpara'><div id='qty.spec.ops-7.sentence-1' class='sentence'><i >Returns</i>: <span class='codeblock'><i >clone-kind-of</i><span class='anglebracket'>&lt;</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>
<i >expr-pow</i><span class='anglebracket'>&lt;</span>Num, Den, derived_quantity_spec, <span class='keyword'>struct</span> dimensionless<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><i >remove-kind</i><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:QuantitySpec,sqrt'><div id='lib:sqrt,QuantitySpec'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:sqrt,QuantitySpec'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> sqrt<span class='parenthesis'>(</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec______________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> q<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.spec.ops.html#8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2022'>#</a></div><div class='texpara'><div id='qty.spec.ops-8.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>pow<span class='anglebracket'>&lt;</span><span class='literal'>1</span>, <span class='literal'>2</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.spec.ops-8.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:QuantitySpec,cbrt'><div id='lib:cbrt,QuantitySpec'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:cbrt,QuantitySpec'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_______________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> cbrt<span class='parenthesis'>(</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> q<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.spec.ops.html#9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2033'>#</a></div><div class='texpara'><div id='qty.spec.ops-9.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>pow<span class='anglebracket'>&lt;</span><span class='literal'>1</span>, <span class='literal'>3</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.spec.ops-9.sentence-1'>.</a></div></div></div></div></div><div id='qty.spec.hier.algos' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.3.6</a> Hierarchy algorithms <a class='abbr_ref' href='qty.spec.hier.algos.html'>[qty.spec.hier.algos]</a></h4><div id='qty.spec.conv' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.3.6.1</a> Conversion <a class='abbr_ref' href='qty.spec.conv.html'>[qty.spec.conv]</a></h4><div class='texpara'><div id='lib:QuantitySpec,implicitly_convertible'><div id='lib:implicitly_convertible,QuantitySpec'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:implicitly_convertible,QuantitySpec'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <span class='keyword'>bool</span> implicitly_convertible<span class='parenthesis'>(</span>QuantitySpec <span class='keyword'>auto</span> from, QuantitySpec <span class='keyword'>auto</span> to<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.spec.conv.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2048'>#</a></div><div class='texpara'><div id='qty.spec.conv-1.sentence-1' class='sentence'><i >Returns</i>: TBD<a class='hidden_link' href='#qty.spec.conv-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:QuantitySpec,explicitly_convertible'><div id='lib:explicitly_convertible,QuantitySpec'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:explicitly_convertible,QuantitySpec'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <span class='keyword'>bool</span> explicitly_convertible<span class='parenthesis'>(</span>QuantitySpec <span class='keyword'>auto</span> from, QuantitySpec <span class='keyword'>auto</span> to<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.spec.conv.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2059'>#</a></div><div class='texpara'><div id='qty.spec.conv-2.sentence-1' class='sentence'><i >Returns</i>: TBD<a class='hidden_link' href='#qty.spec.conv-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:QuantitySpec,castable'><div id='lib:castable,QuantitySpec'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:castable,QuantitySpec'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <span class='keyword'>bool</span> castable<span class='parenthesis'>(</span>QuantitySpec <span class='keyword'>auto</span> from, QuantitySpec <span class='keyword'>auto</span> to<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.spec.conv.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2070'>#</a></div><div class='texpara'><div id='qty.spec.conv-3.sentence-1' class='sentence'><i >Returns</i>: TBD<a class='hidden_link' href='#qty.spec.conv-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:QuantitySpec,interconvertible'><div id='lib:interconvertible,QuantitySpec'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:interconvertible,QuantitySpec'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <span class='keyword'>bool</span> interconvertible<span class='parenthesis'>(</span>QuantitySpec <span class='keyword'>auto</span> qs1, QuantitySpec <span class='keyword'>auto</span> qs2<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.spec.conv.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2081'>#</a></div><div class='texpara'><div id='qty.spec.conv-4.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>implicitly_<span class='shy'></span>convertible<span class='parenthesis'>(</span>qs1, qs2<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> implicitly_<span class='shy'></span>convertible<span class='parenthesis'>(</span>qs2, qs1<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.spec.conv-4.sentence-1'>.</a></div></div></div></div></div><div id='qty.get.kind' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.3.6.2</a> Get kind <a class='abbr_ref' href='qty.get.kind.html'>[qty.get.kind]</a></h4><div class='texpara'><div id='lib:get-kind-tree-root,QuantitySpec'><div id='lib:QuantitySpec,get-kind-tree-root'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:QuantitySpec,get-kind-tree-root'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> <span class='texttt'><i >get-kind-tree-root</i></span><span class='parenthesis'>(</span>Q q<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.get.kind.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2095'>#</a></div><div class='texpara'><div id='qty.get.kind-1.sentence-1' class='sentence'><i >Returns</i>: <ul class='itemize'><li id='qty.get.kind-1.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.get.kind-1.1'>(1.1)</a></div><div class='texpara'><div id='qty.get.kind-1.1.sentence-1' class='sentence'>If <span class='texttt'><a class='index' id='conceptref:QuantityKindSpec__________'></a><span class='texttt'><i >QuantityKindSpec</i></span><span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span>,
returns <span class='texttt'><span class='texttt'><i >remove-kind</i></span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.get.kind-1.1.sentence-1'>.</a></div></div></li><li id='qty.get.kind-1.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.get.kind-1.2'>(1.2)</a></div><div class='texpara'><div id='qty.get.kind-1.2.sentence-1' class='sentence'>Otherwise, if
<span class='texttt'><span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'>&lt;</span>Q, quantity_<span class='shy'></span>spec<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
is <span class='texttt'><span class='literal'>true</span></span>, and
the specialization of <span class='texttt'>Q<span class='operator'>&#x200b;::&#x200b;</span>quantity_<span class='shy'></span>spec</span> has a template argument equal to <span class='texttt'>is_<span class='shy'></span>kind</span>,
returns <span class='texttt'>q</span><a class='hidden_link' href='#qty.get.kind-1.2.sentence-1'>.</a></div></div></li><li id='qty.get.kind-1.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.get.kind-1.3'>(1.3)</a></div><div class='texpara'><div id='qty.get.kind-1.3.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>Q<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >parent</i></span></span> is a valid expression,
returns <span class='texttt'><span class='texttt'><i >get-kind-tree-root</i></span><span class='parenthesis'>(</span>Q<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >parent</i></span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.get.kind-1.3.sentence-1'>.</a></div></div></li><li id='qty.get.kind-1.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.get.kind-1.4'>(1.4)</a></div><div class='texpara'><div id='qty.get.kind-1.4.sentence-1' class='sentence'>Otherwise, if <span class='texttt'><a class='index' id='conceptref:DerivedQuantitySpec____'></a><span class='texttt'><i >DerivedQuantitySpec</i></span><span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span></span> is <span class='texttt'><span class='literal'>true</span></span>,
returns
<span class='codeblock'><i >expr-map</i><span class='anglebracket'>&lt;</span><i >to-kind</i>, derived_quantity_spec, <span class='keyword'>struct</span> dimensionless<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span>
</span>
where <span class='texttt'><i >to-kind</i></span> is defined as follows:
<span class='codeblock'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>using</span> <i >to-kind</i> <span class='operator'>=</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><i >get-kind-tree-root</i><span class='parenthesis'>(</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</span></div></div></li><li id='qty.get.kind-1.5'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.get.kind-1.5'>(1.5)</a></div><div class='texpara'><div id='qty.get.kind-1.5.sentence-1' class='sentence'>Otherwise, returns <span class='texttt'>q</span><a class='hidden_link' href='#qty.get.kind-1.5.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='texpara'><div id='lib:QuantitySpec,get_kind'><div id='lib:get_kind,QuantitySpec'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:get_kind,QuantitySpec'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec____________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <a class='index' id='conceptref:QuantityKindSpec___________'></a><span class='texttt'><i >QuantityKindSpec</i></span> <span class='keyword'>auto</span> get_kind<span class='parenthesis'>(</span>Q<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.get.kind.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2133'>#</a></div><div class='texpara'><div id='qty.get.kind-2.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>kind_<span class='shy'></span>of<span class='anglebracket'>&lt;</span><span class='texttt'><i >get-kind-tree-root</i></span><span class='parenthesis'>(</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.get.kind-2.sentence-1'>.</a></div></div></div></div></div><div id='get.common.qty.spec' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.3.6.3</a> Get common quantity specification <a class='abbr_ref' href='get.common.qty.spec.html'>[get.common.qty.spec]</a></h4><div class='texpara'><div id='lib:QuantitySpec,get_common_quantity_spec'><div id='lib:get_common_quantity_spec,QuantitySpec'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:get_common_quantity_spec,QuantitySpec'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> get_common_quantity_spec<span class='parenthesis'>(</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec______________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> qs<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='get.common.qty.spec.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2147'>#</a></div><div class='texpara'><div id='get.common.qty.spec-1.sentence-1' class='sentence'>Let
<ul class='itemize'><li id='get.common.qty.spec-1.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#get.common.qty.spec-1.1'>(1.1)</a></div><span class='texttt'>q1</span> be <span class='texttt'>qs<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='squarebracket'>[</span><span class='literal'>0</span><span class='squarebracket'>]</span></span>,</li><li id='get.common.qty.spec-1.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#get.common.qty.spec-1.2'>(1.2)</a></div><span class='texttt'>q2</span> be <span class='texttt'>qs<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='squarebracket'>[</span><span class='literal'>1</span><span class='squarebracket'>]</span></span>,</li><li id='get.common.qty.spec-1.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#get.common.qty.spec-1.3'>(1.3)</a></div><span class='texttt'>Q1</span> be <span class='texttt'><span class='keyword'>decltype</span><span class='parenthesis'>(</span>q1<span class='parenthesis'>)</span></span>,</li><li id='get.common.qty.spec-1.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#get.common.qty.spec-1.4'>(1.4)</a></div><span class='texttt'>Q2</span> be <span class='texttt'><span class='keyword'>decltype</span><span class='parenthesis'>(</span>q2<span class='parenthesis'>)</span></span>, and</li><li id='get.common.qty.spec-1.5'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#get.common.qty.spec-1.5'>(1.5)</a></div><span class='texttt'>rest</span> be a pack denoting the elements of <span class='texttt'>qs</span> without <span class='texttt'>q1</span> and <span class='texttt'>q2</span><a class='hidden_link' href='#get.common.qty.spec-1.sentence-1'>.</a></li></ul></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='get.common.qty.spec.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2162'>#</a></div><div class='texpara'><div id='get.common.qty.spec-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>qs<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>1</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> q1;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>qs<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>2</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> QQ1 <span class='operator'>=</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><i >remove-kind</i><span class='parenthesis'>(</span>q1<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='keyword'>using</span> QQ2 <span class='operator'>=</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><i >remove-kind</i><span class='parenthesis'>(</span>q2<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>std<span class='operator'>::</span>is_same_v<span class='anglebracket'>&lt;</span>Q1, Q2<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> q1;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><a class='index' id='conceptref:NestedQuantityKindSpecOf__'></a><i >NestedQuantityKindSpecOf</i><span class='anglebracket'>&lt;</span>Q1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> QQ1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><a class='index' id='conceptref:NestedQuantityKindSpecOf___'></a><i >NestedQuantityKindSpecOf</i><span class='anglebracket'>&lt;</span>Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Q1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> QQ2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><span class='parenthesis'>(</span><a class='index' id='conceptref:QuantityKindSpec____________'></a><i >QuantityKindSpec</i><span class='anglebracket'>&lt;</span>Q1<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='operator'>!</span><a class='index' id='conceptref:QuantityKindSpec_____________'></a><i >QuantityKindSpec</i><span class='anglebracket'>&lt;</span>Q2<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
<span class='parenthesis'>(</span><a class='index' id='conceptref:DerivedQuantitySpec_____'></a><i >DerivedQuantitySpec</i><span class='anglebracket'>&lt;</span>QQ1<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:NamedQuantitySpec_____'></a><i >NamedQuantitySpec</i><span class='anglebracket'>&lt;</span>QQ2<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
implicitly_convertible<span class='parenthesis'>(</span>Q1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> q2;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><span class='parenthesis'>(</span><span class='operator'>!</span><a class='index' id='conceptref:QuantityKindSpec______________'></a><i >QuantityKindSpec</i><span class='anglebracket'>&lt;</span>Q1<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:QuantityKindSpec_______________'></a><i >QuantityKindSpec</i><span class='anglebracket'>&lt;</span>Q2<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
<span class='parenthesis'>(</span><a class='index' id='conceptref:NamedQuantitySpec______'></a><i >NamedQuantitySpec</i><span class='anglebracket'>&lt;</span>QQ1<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:DerivedQuantitySpec______'></a><i >DerivedQuantitySpec</i><span class='anglebracket'>&lt;</span>QQ2<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
implicitly_convertible<span class='parenthesis'>(</span>Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Q1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> q1;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><span class='keyword'>constexpr</span> <span class='keyword'>auto</span> common_base <span class='operator'>=</span> <i >get-common-base</i><span class='anglebracket'>&lt;</span>Q1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> <span class='operator'>*</span>common_base;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>implicitly_convertible<span class='parenthesis'>(</span>Q1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> q2;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>implicitly_convertible<span class='parenthesis'>(</span>Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Q1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> q1;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>implicitly_convertible<span class='parenthesis'>(</span><i >get-kind-tree-root</i><span class='parenthesis'>(</span>Q1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>,
<i >get-kind-tree-root</i><span class='parenthesis'>(</span>Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> <i >get-kind-tree-root</i><span class='parenthesis'>(</span>q2<span class='parenthesis'>)</span>;
<span class='keyword'>else</span>
<span class='keyword'>return</span> <i >get-kind-tree-root</i><span class='parenthesis'>(</span>q1<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span> <span class='keyword'>else</span>
<span class='keyword'>return</span> get_common_quantity_spec<span class='parenthesis'>(</span>get_common_quantity_spec<span class='parenthesis'>(</span>q1, q2<span class='parenthesis'>)</span>, rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='get.common.qty.spec.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2201'>#</a></div><div class='texpara'><div id='get.common.qty.spec-3.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>qs<span class='parenthesis'>)</span> <span class='operator'>!</span><span class='operator'>=</span> <span class='literal'>0</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>qs<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>1</span> <span class='operator'>|</span><span class='operator'>|</span>
<span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>qs<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>2</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span><a class='index' id='conceptref:QuantitySpecConvertibleTo_'></a><i >QuantitySpecConvertibleTo</i><span class='anglebracket'>&lt;</span><i >get-kind-tree-root</i><span class='parenthesis'>(</span>Q1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, <i >get-kind-tree-root</i><span class='parenthesis'>(</span>Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span>
<a class='index' id='conceptref:QuantitySpecConvertibleTo__'></a><i >QuantitySpecConvertibleTo</i><span class='anglebracket'>&lt;</span><i >get-kind-tree-root</i><span class='parenthesis'>(</span>Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, <i >get-kind-tree-root</i><span class='parenthesis'>(</span>Q1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
<span class='keyword'>requires</span> <span class='curlybracket'>{</span> get_common_quantity_spec<span class='parenthesis'>(</span>get_common_quantity_spec<span class='parenthesis'>(</span>q1, q2<span class='parenthesis'>)</span>, rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
</span></div></div></div></div></div><div id='qty.get.common.base' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.3.6.4</a> Get common base <a class='abbr_ref' href='qty.get.common.base.html'>[qty.get.common.base]</a></h4><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.get.common.base.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2216'>#</a></div><div class='texpara'><div id='qty.get.common.base-1.sentence-1' class='sentence'>In this subclause and <a href='#qty.is.child.of' title='5.4.3.6.5&emsp;Is child of'>[qty.<span class='shy'></span>is.<span class='shy'></span>child.<span class='shy'></span>of]</a>,
let the kind of quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-04">IEC 60050, 112-01-04</a>) hierarchy of <span class='texttt'>q</span> be the tuple
<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.446em; padding-bottom: 0.298em;">h</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.519em;">q</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-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-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.519em;">q</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.519em;">q<span class='operator'>.</span>par</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.519em;">q<span class='operator'>.</span>par<span class='operator'>.</span>par</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mo MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.372em;">…</span></span><span class="mjx-texatom MJXc-space1"><span class="mjx-mrow"></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span>,
where <span class='texttt'>par</span> is <span class='texttt'><i >parent</i></span><a class='hidden_link' href='#qty.get.common.base-1.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:get-common-base,QuantitySpec'><div id='lib:QuantitySpec,get-common-base'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:QuantitySpec,get-common-base'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_______________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> A, <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> B<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >get-common-base</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'><div class='marginalizedparent'><a class='marginalized' href='qty.get.common.base.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2229'>#</a></div><div class='texpara'><div id='qty.get.common.base-2.sentence-1' class='sentence'>Let
<ul class='itemize'><li id='qty.get.common.base-2.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.get.common.base-2.1'>(2.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;">a</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span></span></span></span></span></span> be the number of elements in <span class='math'><span class='mathalpha'>h</span>(<span class='texttt'>A</span>)</span>,</li><li id='qty.get.common.base-2.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.get.common.base-2.2'>(2.2)</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.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span></span></span></span></span></span> be the number of elements in <span class='math'><span class='mathalpha'>h</span>(<span class='texttt'>B</span>)</span>,</li><li id='qty.get.common.base-2.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.get.common.base-2.3'>(2.3)</a></div><span class='math'><span class='mathalpha'>s</span></span> be <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-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">min</span></span><span class="mjx-mo"><span class="mjx-char"></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-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;">a</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.446em; padding-bottom: 0.298em;">b</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; padding-right: 0.071em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">s</span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span>,</li><li id='qty.get.common.base-2.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.get.common.base-2.4'>(2.4)</a></div><span class='math'><span class='mathalpha'>A</span></span> be a tuple of the last <span class='math'><span class='mathalpha'>s</span></span> elements of <span class='math'><span class='mathalpha'>h</span>(<span class='texttt'>A</span>)</span>, and</li><li id='qty.get.common.base-2.5'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.get.common.base-2.5'>(2.5)</a></div><span class='math'><span class='mathalpha'>B</span></span> be a tuple of the last <span class='math'><span class='mathalpha'>s</span></span> elements of <span class='math'><span class='mathalpha'>h</span>(<span class='texttt'>B</span>)</span><a class='hidden_link' href='#qty.get.common.base-2.sentence-1'>.</a></li></ul></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.get.common.base.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2244'>#</a></div><div class='texpara'><div id='qty.get.common.base-3.sentence-1' class='sentence'><i >Effects</i>: Looks for <span class='math'><span class='mathalpha'>x</span></span>, the first pair-wise equal element in <span class='math'><span class='mathalpha'>A</span></span> and <span class='math'><span class='mathalpha'>B</span></span><a class='hidden_link' href='#qty.get.common.base-3.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.get.common.base.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2248'>#</a></div><div class='texpara'><div id='qty.get.common.base-4.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>optional<span class='parenthesis'>(</span><span class='math'><span class='mathalpha'>x</span></span><span class='parenthesis'>)</span></span>, if <span class='math'><span class='mathalpha'>x</span></span> is found, and <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>optional<span class='anglebracket'>&lt;</span><i ><span class='texttt'>unspecified</span></i><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span></span> otherwise<a class='hidden_link' href='#qty.get.common.base-4.sentence-1'>.</a></div></div></div></div></div><div id='qty.is.child.of' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.3.6.5</a> Is child of <a class='abbr_ref' href='qty.is.child.of.html'>[qty.is.child.of]</a></h4><div class='texpara'><div id='lib:is-child-of,QuantitySpec'><div id='lib:QuantitySpec,is-child-of'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:QuantitySpec,is-child-of'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Child, <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Parent<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='texttt'><i >is-child-of</i></span><span class='parenthesis'>(</span>Child ch, Parent p<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.is.child.of.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2262'>#</a></div><div class='texpara'><div id='qty.is.child.of-1.sentence-1' class='sentence'><i >Returns</i>: If <span class='math'><span class='mathalpha'>h</span>(<span class='texttt'>p</span>)</span> has more elements than <span class='math'><span class='mathalpha'>h</span>(<span class='texttt'>ch</span>)</span>, returns <span class='texttt'><span class='literal'>false</span></span><a class='hidden_link' href='#qty.is.child.of-1.sentence-1'>.</a></div> <div id='qty.is.child.of-1.sentence-2' class='sentence'>Otherwise, let <span class='math'><span class='mathalpha'>C</span></span> be a tuple of the last <span class='math'><span class='mathalpha'>s</span></span> elements of <span class='math'><span class='mathalpha'>h</span>(<span class='texttt'>ch</span>)</span>,
where <span class='math'><span class='mathalpha'>s</span></span> is the number of elements in <span class='math'><span class='mathalpha'>h</span>(<span class='texttt'>p</span>)</span><a class='hidden_link' href='#qty.is.child.of-1.sentence-2'>.</a></div> <div id='qty.is.child.of-1.sentence-3' class='sentence'>Returns <span class='texttt'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base" style="margin-right: -0.045em;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-math-I" style="padding-top: 0.519em; padding-bottom: 0.298em; padding-right: 0.045em;">C</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.212em; 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;">0</span></span></span></span></span></span></span> <span class='operator'>=</span><span class='operator'>=</span> p</span><a class='hidden_link' href='#qty.is.child.of-1.sentence-3'>.</a></div></div></div></div></div></div></div><div id='qty.unit' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.4.4</a> Unit <a class='abbr_ref' href='qty.unit.html'>[qty.unit]</a></h3><div id='qty.unit.general' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.4.1</a> General <a class='abbr_ref' href='qty.unit.general.html'>[qty.unit.general]</a></h4><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.general.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2274'>#</a></div><div class='texpara'><div id='qty.unit.general-1.sentence-1' class='sentence'>Subclause <a href='#qty.unit' title='5.4.4&emsp;Unit'>[qty.<span class='shy'></span>unit]</a> specifies the components
for defining a unit of measurement (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-14">IEC 60050, 112-01-14</a>)<a class='hidden_link' href='#qty.unit.general-1.sentence-1'>.</a></div></div></div></div><div id='qty.unit.mag' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.4.2</a> Magnitude <a class='abbr_ref' href='qty.unit.mag.html'>[qty.unit.mag]</a></h4><div id='qty.unit.mag.general' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.4.2.1</a> General <a class='abbr_ref' href='qty.unit.mag.general.html'>[qty.unit.mag.general]</a></h4><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.mag.general.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2282'>#</a></div><div class='texpara'><div id='qty.unit.mag.general-1.sentence-1' class='sentence'>Subclause <a href='#qty.unit.mag' title='5.4.4.2&emsp;Magnitude'>[qty.<span class='shy'></span>unit.<span class='shy'></span>mag]</a> specifies the components
used to represent the numerical value (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-29">IEC 60050, 112-01-29</a>) of a unit
with support for powers (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-02-08">IEC 60050, 102-02-08</a>) of real numbers (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-02-05">IEC 60050, 102-02-05</a>)<a class='hidden_link' href='#qty.unit.mag.general-1.sentence-1'>.</a></div></div></div></div><div id='qty.unit.mag.concepts' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.4.2.2</a> Concepts <a class='abbr_ref' href='qty.unit.mag.concepts.html'>[qty.unit.mag.concepts]</a></h4><div class='texpara'><div class='itemdecl' id='qty.unit.mag.concepts-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#qty.unit.mag.concepts-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:MagConstant' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='concept:MagConstant'><span id='lib:MagConstant'><span class='texttt'>MagConstant</span></span></span></a> <span class='operator'>=</span> <a class='index' id='conceptref:SymbolicConstant_________'></a><span class='texttt'><i >SymbolicConstant</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'>&lt;</span>T, mag_constant<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='concept:UnitMagnitude'><span id='lib:UnitMagnitude'><span class='texttt'>UnitMagnitude</span></span></span></a> <span class='operator'>=</span> <span class='parenthesis'>(</span><span class='texttt'><i >is-specialization-of</i></span><span class='anglebracket'>&lt;</span>T, <span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >MagArg</i></span><a class='index' id='concept:MagArg'></a> <span class='operator'>=</span> std<span class='operator'>::</span>integral<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span> <a href='#concept:MagConstant' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:MagConstant'><span class='texttt'>MagConstant</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div><div id='qty.unit.mag.types' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.4.2.3</a> Types <a class='abbr_ref' href='qty.unit.mag.types.html'>[qty.unit.mag.types]</a></h4><div class='texpara'><span id='lib:mag_constant'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mag_constant'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol, <span class='keyword'>long</span> <span class='keyword'>double</span> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Value <span class='anglebracket'>&gt;</span> <span class='literal'>0</span><span class='parenthesis'>)</span>
<span class='keyword'>struct</span> mag_constant <span class='curlybracket'>{</span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>long</span> <span class='keyword'>double</span> <i >value</i> <span class='operator'>=</span> Value; <span class='comment'>// <i >exposition only</i></span>
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='texpara'><div id='qty.unit.mag.types-sentence-1' class='sentence'>A specialization of <span class='texttt'>mag_<span class='shy'></span>constant</span> represents a real number (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-02-05">IEC 60050, 102-02-05</a>)<a class='hidden_link' href='#qty.unit.mag.types-sentence-1'>.</a></div> <div id='qty.unit.mag.types-sentence-2' class='sentence'><span class='texttt'>Symbol</span> is its symbol, and
<span class='texttt'>Value</span> is (an approximation of) its value<a class='hidden_link' href='#qty.unit.mag.types-sentence-2'>.</a></div></div><div class='texpara'><span id='lib:unit-magnitude'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unit-magnitude'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Ms<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <i >unit-magnitude</i> <span class='curlybracket'>{</span> <span class='comment'>// <i >exposition only</i></span>
<span class='comment'>// <a href='#qty.unit.mag.ops' title='5.4.4.2.4&emsp;Operations'>[qty.<span class='shy'></span>unit.<span class='shy'></span>mag.<span class='shy'></span>ops]</a>, operations</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_____'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> M<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude______'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><i >unit-magnitude</i> lhs, M rhs<span class='parenthesis'>)</span>;
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span><i >unit-magnitude</i> lhs, <a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_______'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><i >unit-magnitude</i>, Rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>int</span> Num, <span class='keyword'>int</span> Den <span class='operator'>=</span> <span class='literal'>1</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <i >pow</i><span class='parenthesis'>(</span><i >unit-magnitude</i><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
<span class='comment'>// <a href='#qty.unit.mag.utils' title='5.4.4.2.5&emsp;Utilities'>[qty.<span class='shy'></span>unit.<span class='shy'></span>mag.<span class='shy'></span>utils]</a>, utilities</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <i >is-positive-integral-power</i><span class='parenthesis'>(</span><i >unit-magnitude</i><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Ms2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <i >common-magnitude</i><span class='parenthesis'>(</span><i >unit-magnitude</i>, <span class='comment'>// <i >exposition only</i></span>
<i >unit-magnitude</i><span class='anglebracket'>&lt;</span>Ms2<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.mag.types.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2351'>#</a></div><div class='texpara'><div id='qty.unit.mag.types-1.sentence-1' class='sentence'>A specialization of <span class='texttt'><i >unit-magnitude</i></span>
represents the product of its template arguments<a class='hidden_link' href='#qty.unit.mag.types-1.sentence-1'>.</a></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.mag.types.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2355'>#</a></div><div class='texpara'><div id='qty.unit.mag.types-2.sentence-1' class='sentence'>For the purposes of specifying the implementation-defined limits,
let the representation of the terms of <span class='texttt'><i >unit-magnitude</i></span> be the structure
<span class='codeblock'><span class='keyword'>struct</span> <span class='curlybracket'>{</span>
<i >ratio</i> exp;
<i >base-type</i> base;
<span class='curlybracket'>}</span>;
</span>
representing the number <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">base</span></span></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.513em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.225em; padding-bottom: 0.519em;">exp</span></span></span></span></span></span></span></span></span>,
where <span class='texttt'><i >base-type</i></span> is a model of <a href='#concept:MagArg' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:MagArg__'><span class='texttt'><i >MagArg</i></span></span></a><a class='hidden_link' href='#qty.unit.mag.types-2.sentence-1'>.</a></div> <ul class='itemize'><li id='qty.unit.mag.types-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.unit.mag.types-2.1'>(2.1)</a></div><div class='texpara'><div id='qty.unit.mag.types-2.1.sentence-1' class='sentence'>There is a single term for each <span class='texttt'><i >base-type</i></span><a class='hidden_link' href='#qty.unit.mag.types-2.1.sentence-1'>.</a></div></div></li><li id='qty.unit.mag.types-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.unit.mag.types-2.2'>(2.2)</a></div><div class='texpara'><div id='qty.unit.mag.types-2.2.sentence-1' class='sentence'><span class='texttt'>exp<span class='operator'>.</span>num</span> is not expanded into base<a class='hidden_link' href='#qty.unit.mag.types-2.2.sentence-1'>.</a></div> <div id='qty.unit.mag.types-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#qty.unit.mag.types-note-1'>1</a></i>:&ensp;<div id='qty.unit.mag.types-2.2.sentence-2' class='sentence'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">2</span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.591em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">3</span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">8</span></span></span></span></span> is not permitted<a class='hidden_link' href='#qty.unit.mag.types-2.2.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></li><li id='qty.unit.mag.types-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.unit.mag.types-2.3'>(2.3)</a></div><div class='texpara'><div id='qty.unit.mag.types-2.3.sentence-1' class='sentence'><span class='texttt'>exp<span class='operator'>.</span>den</span> can reduce the base<a class='hidden_link' href='#qty.unit.mag.types-2.3.sentence-1'>.</a></div> <div id='qty.unit.mag.types-note-2' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#qty.unit.mag.types-note-2'>2</a></i>:&ensp;<div id='qty.unit.mag.types-2.3.sentence-2' class='sentence'><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">4</span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.607em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">/</span></span></span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">2</span></span></span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">2</span></span></span></span></span> is permitted<a class='hidden_link' href='#qty.unit.mag.types-2.3.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></li><li id='qty.unit.mag.types-2.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.unit.mag.types-2.4'>(2.4)</a></div><div class='texpara'><div id='qty.unit.mag.types-2.4.sentence-1' class='sentence'>If the result of an operation on <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>intmax_<span class='shy'></span>t</span> values is undefined,
the behavior is
<a class='index' id=':behavior_of_unit-magnitude_operations_that_do_not_fit_in_a_std::intmax_t'></a>implementation-defined<a class='hidden_link' href='#qty.unit.mag.types-2.4.sentence-1'>.</a></div></div></li></ul></div></div></div><div id='qty.unit.mag.ops' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.4.2.4</a> Operations <a class='abbr_ref' href='qty.unit.mag.ops.html'>[qty.unit.mag.ops]</a></h4><div class='texpara'><div id='lib:UnitMagnitude,operator*'><div id='lib:operator*,UnitMagnitude'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,UnitMagnitude'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_________'><span class='texttt'>UnitMagnitude</span></span></a> M<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude__________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span> lhs, M rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.mag.ops.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2394'>#</a></div><div class='texpara'><div id='qty.unit.mag.ops-1.sentence-1' class='sentence'><i >Returns</i>: <ul class='itemize'><li id='qty.unit.mag.ops-1.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.unit.mag.ops-1.1'>(1.1)</a></div><div class='texpara'><div id='qty.unit.mag.ops-1.1.sentence-1' class='sentence'>If <span class='texttt'><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>Ms<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>0</span></span> is <span class='texttt'><span class='literal'>true</span></span>, returns <span class='texttt'>rhs</span><a class='hidden_link' href='#qty.unit.mag.ops-1.1.sentence-1'>.</a></div></div></li><li id='qty.unit.mag.ops-1.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.unit.mag.ops-1.2'>(1.2)</a></div><div class='texpara'><div id='qty.unit.mag.ops-1.2.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>same_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>M, <span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span></span>, returns <span class='texttt'>lhs</span><a class='hidden_link' href='#qty.unit.mag.ops-1.2.sentence-1'>.</a></div></div></li><li id='qty.unit.mag.ops-1.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.unit.mag.ops-1.3'>(1.3)</a></div><div class='texpara'><div id='qty.unit.mag.ops-1.3.sentence-1' class='sentence'>Otherwise, returns an unspecified value equal to <span class='math'><span class='texttt'>lhs</span> &times;<span class='texttt'>rhs</span></span><a class='hidden_link' href='#qty.unit.mag.ops-1.3.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='texpara'><div id='lib:UnitMagnitude,operator/'><div id='lib:operator/,UnitMagnitude'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator/,UnitMagnitude'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span> lhs, <a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude___________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.mag.ops.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2412'>#</a></div><div class='texpara'><div id='qty.unit.mag.ops-2.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>lhs <span class='operator'>*</span> <span class='texttt'><i >pow</i></span><span class='anglebracket'>&lt;</span><span class='operator'>-</span><span class='literal'>1</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>rhs<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.unit.mag.ops-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:UnitMagnitude,operator=='><div id='lib:operator==,UnitMagnitude'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator==,UnitMagnitude'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude____________'><span class='texttt'>UnitMagnitude</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span>, Rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.mag.ops.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2424'>#</a></div><div class='texpara'><div id='qty.unit.mag.ops-3.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>same_<span class='shy'></span>v<span class='anglebracket'>&lt;</span><span class='texttt'><i >unit-magnitude</i></span>, Rhs<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.unit.mag.ops-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:pow,UnitMagnitude'><div id='lib:UnitMagnitude,pow'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:UnitMagnitude,pow'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>int</span> Num, <span class='keyword'>int</span> Den <span class='operator'>=</span> <span class='literal'>1</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >pow</i></span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span> base<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.mag.ops.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2436'>#</a></div><div class='texpara'><div id='qty.unit.mag.ops-4.sentence-1' class='sentence'><i >Returns</i>: <ul class='itemize'><li id='qty.unit.mag.ops-4.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.unit.mag.ops-4.1'>(4.1)</a></div><div class='texpara'><div id='qty.unit.mag.ops-4.1.sentence-1' class='sentence'>If <span class='texttt'>Num <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>0</span></span> is <span class='texttt'><span class='literal'>true</span></span>, returns <span class='texttt'><span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span></span><a class='hidden_link' href='#qty.unit.mag.ops-4.1.sentence-1'>.</a></div></div></li><li id='qty.unit.mag.ops-4.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.unit.mag.ops-4.2'>(4.2)</a></div><div class='texpara'><div id='qty.unit.mag.ops-4.2.sentence-1' class='sentence'>Otherwise, returns an unspecified value equal to <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">base</span></span></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.513em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">Num</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">/</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">Den</span></span></span></span></span></span></span></span></span></span></span><a class='hidden_link' href='#qty.unit.mag.ops-4.2.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='texpara'><div id='lib:mag'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mag'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:MagArg___'></a><span class='texttt'><i >MagArg</i></span> <span class='keyword'>auto</span> V<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_____________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> mag <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
</code></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.mag.ops.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2453'>#</a></div><div class='texpara'><div id='qty.unit.mag.ops-5.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>V</span> is greater than <span class='math'>0</span><a class='hidden_link' href='#qty.unit.mag.ops-5.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.mag.ops.html#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2457'>#</a></div><div class='texpara'><div id='qty.unit.mag.ops-6.sentence-1' class='sentence'><i >Effects</i>: If <span class='texttt'><a href='#concept:MagConstant' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:MagConstant_'><span class='texttt'>MagConstant</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>V<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span></span> is satisfied,
initializes <span class='texttt'>mag</span> with <span class='texttt'><span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'>&lt;</span>V<span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span></span><a class='hidden_link' href='#qty.unit.mag.ops-6.sentence-1'>.</a></div> <div id='qty.unit.mag.ops-6.sentence-2' class='sentence'>Otherwise, initializes <span class='texttt'>mag</span> with
an unspecified value equal to <span class='texttt'>V</span><a class='hidden_link' href='#qty.unit.mag.ops-6.sentence-2'>.</a></div></div></div></div><div class='texpara'><div id='lib:mag_ratio'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mag_ratio'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>intmax_t N, std<span class='operator'>::</span>intmax_t D<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>N <span class='anglebracket'>&gt;</span> <span class='literal'>0</span><span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude______________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> mag_ratio <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
</code></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.mag.ops.html#7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2473'>#</a></div><div class='texpara'><div id='qty.unit.mag.ops-7.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'>mag_<span class='shy'></span>ratio</span> with
an unspecified value equal to <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.298em;">N</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">/</span></span></span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-type-R" style="padding-top: 0.372em; padding-bottom: 0.225em;">D</span></span></span></span></span></span></span><a class='hidden_link' href='#qty.unit.mag.ops-7.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:mag_power'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:mag_power'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:MagArg____'></a><span class='texttt'><i >MagArg</i></span> <span class='keyword'>auto</span> Base, <span class='keyword'>int</span> Num, <span class='keyword'>int</span> Den <span class='operator'>=</span> <span class='literal'>1</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_______________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> mag_power <span class='operator'>=</span> <span class='texttt'><i >pow</i></span><span class='anglebracket'>&lt;</span>Num, Den<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>mag<span class='anglebracket'>&lt;</span>Base<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.mag.ops.html#8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2486'>#</a></div><div class='texpara'><div id='qty.unit.mag.ops-8.sentence-1' class='sentence'><i >Constraints</i>: <span class='texttt'>Base</span> is greater than <span class='math'>0</span><a class='hidden_link' href='#qty.unit.mag.ops-8.sentence-1'>.</a></div></div></div></div></div><div id='qty.unit.mag.utils' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.4.2.5</a> Utilities <a class='abbr_ref' href='qty.unit.mag.utils.html'>[qty.unit.mag.utils]</a></h4><div class='texpara'><div id='lib:is-positive-integral-power,UnitMagnitude'><div id='lib:UnitMagnitude,is-positive-integral-power'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:UnitMagnitude,is-positive-integral-power'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='texttt'><i >is-positive-integral-power</i></span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span> x<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.mag.utils.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2499'>#</a></div><div class='texpara'><div id='qty.unit.mag.utils-1.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='literal'>false</span></span> if <span class='texttt'>x</span> has a negative or rational exponent, and
<span class='texttt'><span class='literal'>true</span></span> otherwise<a class='hidden_link' href='#qty.unit.mag.utils-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:common-magnitude,UnitMagnitude'><div id='lib:UnitMagnitude,common-magnitude'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:UnitMagnitude,common-magnitude'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Ms2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >common-magnitude</i></span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span>, <span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'>&lt;</span>Ms2<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.mag.utils.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2512'>#</a></div><div class='texpara'><div id='qty.unit.mag.utils-2.sentence-1' class='sentence'><i >Returns</i>: The largest magnitude <span class='texttt'>C</span>
such that each input magnitude is expressible
by only positive powers relative to <span class='texttt'>C</span><a class='hidden_link' href='#qty.unit.mag.utils-2.sentence-1'>.</a></div></div></div></div></div></div><div id='qty.unit.traits' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.4.3</a> Traits <a class='abbr_ref' href='qty.unit.traits.html'>[qty.unit.traits]</a></h4><div class='texpara'><div id='lib:space_before_unit_symbol'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:space_before_unit_symbol'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit___________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> space_before_unit_symbol <span class='operator'>=</span> <span class='literal'>true</span>;
</code></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.traits.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2528'>#</a></div><div class='texpara'><div id='qty.unit.traits-1.sentence-1' class='sentence'>The formatting functions (<a href='#qty.unit.sym.fmt' title='5.4.4.10&emsp;Symbol formatting'>[qty.<span class='shy'></span>unit.<span class='shy'></span>sym.<span class='shy'></span>fmt]</a>) use <span class='texttt'>space_<span class='shy'></span>before_<span class='shy'></span>unit_<span class='shy'></span>symbol</span>
to determine whether there is a space
between the numerical value and the unit symbol<a class='hidden_link' href='#qty.unit.traits-1.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.traits.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2533'>#</a></div><div class='texpara'><div id='qty.unit.traits-2.sentence-1' class='sentence'><i >Remarks</i>: Pursuant to <a href="https://wg21.link/namespace.std">N4971, [namespace.std]</a> (<a href='#spec.ext' title='4.1&emsp;External'>[spec.<span class='shy'></span>ext]</a>),
users may specialize <span class='texttt'>space_<span class='shy'></span>before_<span class='shy'></span>unit_<span class='shy'></span>symbol</span>
for cv-unqualified program-defined types<a class='hidden_link' href='#qty.unit.traits-2.sentence-1'>.</a></div> <div id='qty.unit.traits-2.sentence-2' class='sentence'>Such specializations shall be usable in constant expressions (<a href="https://wg21.link/expr.const">N4971, [expr.const]</a>)
and have type <span class='texttt'><span class='keyword'>const</span> <span class='keyword'>bool</span></span><a class='hidden_link' href='#qty.unit.traits-2.sentence-2'>.</a></div></div></div></div></div><div id='qty.unit.concepts' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.4.4</a> Concepts <a class='abbr_ref' href='qty.unit.concepts.html'>[qty.unit.concepts]</a></h4><div class='texpara'><div class='itemdecl' id='qty.unit.concepts-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#qty.unit.concepts-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='concept:Unit'><span id='lib:Unit'><span class='texttt'>Unit</span></span></span></a> <span class='operator'>=</span> <a class='index' id='conceptref:SymbolicConstant__________'></a><span class='texttt'><i >SymbolicConstant</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>T, <span class='texttt'><i >unit-interface</i></span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:PrefixableUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='concept:PrefixableUnit'><span id='lib:PrefixableUnit'><span class='texttt'>PrefixableUnit</span></span></span></a> <span class='operator'>=</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit____________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'>&lt;</span>T, named_unit<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='concept:AssociatedUnit'><span id='lib:AssociatedUnit'><span class='texttt'>AssociatedUnit</span></span></span></a> <span class='operator'>=</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_____________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'>&lt;</span>U<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='texttt'><i >has-associated-quantity</i></span><span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> U, <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:UnitOf' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='concept:UnitOf'><span id='lib:UnitOf'><span class='texttt'>UnitOf</span></span></span></a> <span class='operator'>=</span> <a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit_________'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'>&lt;</span>U<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>QS<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:QuantitySpecConvertibleTo___'></a><span class='texttt'><i >QuantitySpecConvertibleTo</i></span><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, QS<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span>get_kind<span class='parenthesis'>(</span>QS<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> get_kind<span class='parenthesis'>(</span>get_quantity_spec<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
<span class='operator'>!</span><a class='index' id='conceptref:NestedQuantityKindSpecOf____'></a><span class='texttt'><i >NestedQuantityKindSpecOf</i></span><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, QS<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>auto</span> From, <span class='keyword'>auto</span> To<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >UnitConvertibleTo</i></span><a class='index' id='concept:UnitConvertibleTo'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit______________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>From<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_______________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>To<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span>convertible<span class='parenthesis'>(</span>From, To<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> U, <span class='keyword'>auto</span> FromU, <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >UnitCompatibleWith</i></span><a class='index' id='concept:UnitCompatibleWith'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit________________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'>&lt;</span>U<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_________________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>FromU<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec____________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>QS<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit__________'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'>&lt;</span>U<span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span> <a href='#concept:UnitOf' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:UnitOf___'><span class='texttt'>UnitOf</span></span></a><span class='anglebracket'>&lt;</span>U, QS<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:UnitConvertibleTo'></a><span class='texttt'><i >UnitConvertibleTo</i></span><span class='anglebracket'>&lt;</span>FromU, U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >OffsetUnit</i></span><a class='index' id='concept:OffsetUnit'></a> <span class='operator'>=</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit__________________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='keyword'>requires</span> <span class='curlybracket'>{</span> T<span class='operator'>::</span><span class='texttt'><i >point-origin</i></span>; <span class='curlybracket'>}</span>; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> From, <span class='keyword'>typename</span> To<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >PotentiallyConvertibleTo</i></span><a class='index' id='concept:PotentiallyConvertibleTo'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit___________________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'>&lt;</span>From<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit____________________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'>&lt;</span>To<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span><span class='parenthesis'>(</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit___________'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'>&lt;</span>From<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit____________'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'>&lt;</span>To<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
implicitly_convertible<span class='parenthesis'>(</span>get_quantity_spec<span class='parenthesis'>(</span>From<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, get_quantity_spec<span class='parenthesis'>(</span>To<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
<span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit_____________'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'>&lt;</span>From<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='operator'>!</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit______________'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'>&lt;</span>To<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div id='qty.unit.types' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.4.5</a> Types <a class='abbr_ref' href='qty.unit.types.html'>[qty.unit.types]</a></h4><div id='qty.canon.unit' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.4.5.1</a> Canonical <a class='abbr_ref' href='qty.canon.unit.html'>[qty.canon.unit]</a></h4><div class='texpara'><span id='lib:canonical-unit'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:canonical-unit'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude________________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> M, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <i >canonical-unit</i> <span class='curlybracket'>{</span> <span class='comment'>// <i >exposition only</i></span>
M mag;
U reference_unit;
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.canon.unit.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2597'>#</a></div><div class='texpara'><div id='qty.canon.unit-1.sentence-1' class='sentence'><span class='texttt'><i >canonical-unit</i></span> represents a unit expressed in terms of base units (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-18">IEC 60050, 112-01-18</a>)<a class='hidden_link' href='#qty.canon.unit-1.sentence-1'>.</a></div> <div id='qty.canon.unit-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#qty.canon.unit-note-1'>1</a></i>:&ensp;<div id='qty.canon.unit-1.sentence-2' class='sentence'>Other types representing units are equal only if they have the same type<a class='hidden_link' href='#qty.canon.unit-1.sentence-2'>.</a></div> <div id='qty.canon.unit-1.sentence-3' class='sentence'><span class='texttt'><i >canonical-unit</i></span> is used to implement binary relations other than equality<a class='hidden_link' href='#qty.canon.unit-1.sentence-3'>.</a></div> —&nbsp;<i>end note</i>]</div></div> <div id='qty.canon.unit-1.sentence-4' class='sentence'><span class='texttt'>reference_<span class='shy'></span>unit</span> is simplified (<a href='#qty.sym.expr.algos' title='5.3.4.4&emsp;Algorithms'>[qty.<span class='shy'></span>sym.<span class='shy'></span>expr.<span class='shy'></span>algos]</a>)<a class='hidden_link' href='#qty.canon.unit-1.sentence-4'>.</a></div></div></div><div class='texpara'><div id='lib:get-canonical-unit,Unit'><div id='lib:Unit,get-canonical-unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:Unit,get-canonical-unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >get-canonical-unit</i></span><span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit______________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.canon.unit.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2611'>#</a></div><div class='texpara'><div id='qty.canon.unit-2.sentence-1' class='sentence'><i >Returns</i>: The instantiation of <span class='texttt'><i >canonical-unit</i></span> for <span class='texttt'>u</span><a class='hidden_link' href='#qty.canon.unit-2.sentence-1'>.</a></div></div></div></div></div><div id='qty.scaled.unit' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.4.5.2</a> Scaled <a class='abbr_ref' href='qty.scaled.unit.html'>[qty.scaled.unit]</a></h4><div class='texpara'><span id='lib:scaled_unit'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:scaled_unit'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_________________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> M, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>M <span class='operator'>!</span><span class='operator'>=</span> <i >unit-magnitude</i><span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> M <span class='operator'>!</span><span class='operator'>=</span> mag<span class='anglebracket'>&lt;</span><span class='literal'>1</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>struct</span> scaled_unit <span class='keyword'>final</span> <span class='operator'>:</span> <i >unit-interface</i> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> scaled_unit; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude__________________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> <i >mag</i> <span class='operator'>=</span> M; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> U <i >reference-unit</i><span class='curlybracket'>{</span><span class='curlybracket'>}</span>; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >point-origin</i> <span class='operator'>=</span> U<span class='operator'>::</span>point_origin; <span class='comment'>// <i >exposition only</i>, present only</span>
<span class='comment'>// if the <span class='textsf'><i >qualified-id</i></span> <span class='tcode_in_codeblock'>U&#x200b;::&#x200b;point_<span class='shy'></span>origin</span> is valid and denotes an object</span>
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.scaled.unit.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2635'>#</a></div><div class='texpara'><div id='qty.scaled.unit-1.sentence-1' class='sentence'><span class='texttt'>scaled_<span class='shy'></span>unit<span class='anglebracket'>&lt;</span>M, U<span class='anglebracket'>&gt;</span></span> is used by the library
to represent the unit <span class='math'><span class='texttt'>M</span> &times;<span class='texttt'>U</span></span><a class='hidden_link' href='#qty.scaled.unit-1.sentence-1'>.</a></div></div></div></div><div id='qty.named.unit' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.4.5.3</a> Named <a class='abbr_ref' href='qty.named.unit.html'>[qty.named.unit]</a></h4><div class='texpara'><span id='lib:named_unit'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:named_unit'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol, <a class='index' id='conceptref:QuantityKindSpec________________'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:BaseDimension___'></a><i >BaseDimension</i><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>QS<span class='operator'>.</span>dimension<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> named_unit<span class='anglebracket'>&lt;</span>Symbol, QS<span class='anglebracket'>&gt;</span> <span class='operator'>:</span> <i >unit-interface</i> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >quantity-spec</i> <span class='operator'>=</span> QS; <span class='comment'>// <i >exposition only</i></span>
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol, <a class='index' id='conceptref:QuantityKindSpec_________________'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS, <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin___'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> PO<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:BaseDimension____'></a><i >BaseDimension</i><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>QS<span class='operator'>.</span>dimension<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> named_unit<span class='anglebracket'>&lt;</span>Symbol, QS, PO<span class='anglebracket'>&gt;</span> <span class='operator'>:</span> <i >unit-interface</i> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >quantity-spec</i> <span class='operator'>=</span> QS; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >point-origin</i> <span class='operator'>=</span> PO; <span class='comment'>// <i >exposition only</i></span>
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>struct</span> named_unit<span class='anglebracket'>&lt;</span>Symbol<span class='anglebracket'>&gt;</span> <span class='operator'>:</span> <i >unit-interface</i> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>struct</span> named_unit<span class='anglebracket'>&lt;</span>Symbol, U<span class='anglebracket'>&gt;</span> <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> U, <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin____'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> PO<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>struct</span> named_unit<span class='anglebracket'>&lt;</span>Symbol, U, PO<span class='anglebracket'>&gt;</span> <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >point-origin</i> <span class='operator'>=</span> PO; <span class='comment'>// <i >exposition only</i></span>
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol, <a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit_______________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> U, <a class='index' id='conceptref:QuantityKindSpec__________________'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span>QS<span class='operator'>.</span>dimension <span class='operator'>=</span><span class='operator'>=</span> <i >get-associated-quantity</i><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>.</span>dimension<span class='parenthesis'>)</span>
<span class='keyword'>struct</span> named_unit<span class='anglebracket'>&lt;</span>Symbol, U, QS<span class='anglebracket'>&gt;</span> <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >quantity-spec</i> <span class='operator'>=</span> QS; <span class='comment'>// <i >exposition only</i></span>
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol, <a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> U, <a class='index' id='conceptref:QuantityKindSpec___________________'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS,
<a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_____'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> PO<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span>QS<span class='operator'>.</span>dimension <span class='operator'>=</span><span class='operator'>=</span> <i >get-associated-quantity</i><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>.</span>dimension<span class='parenthesis'>)</span>
<span class='keyword'>struct</span> named_unit<span class='anglebracket'>&lt;</span>Symbol, U, QS, PO<span class='anglebracket'>&gt;</span> <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >quantity-spec</i> <span class='operator'>=</span> QS; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >point-origin</i> <span class='operator'>=</span> PO; <span class='comment'>// <i >exposition only</i></span>
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.named.unit.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2705'>#</a></div><div class='texpara'><div id='qty.named.unit-1.sentence-1' class='sentence'>A <a class='hidden_link' href='#def:unit,named' title='5.4.4.5.3&emsp;Named&emsp;[qty.named.unit]'><span id='def:unit,named'><i >named unit</i></span></a> is a type that models <a href='#concept:PrefixableUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:PrefixableUnit_'><span class='texttt'>PrefixableUnit</span></span></a><a class='hidden_link' href='#qty.named.unit-1.sentence-1'>.</a></div> <div id='qty.named.unit-1.sentence-2' class='sentence'>A specialization of <span class='texttt'>named_<span class='shy'></span>unit</span> is used as a base type when defining a named unit<a class='hidden_link' href='#qty.named.unit-1.sentence-2'>.</a></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.named.unit.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2709'>#</a></div><div class='texpara'><div id='qty.named.unit-2.sentence-1' class='sentence'>In the following descriptions, let <span class='texttt'>U</span> be a named unit defined with an alluded signature<a class='hidden_link' href='#qty.named.unit-2.sentence-1'>.</a></div> <div id='qty.named.unit-2.sentence-2' class='sentence'>The identifier of <span class='texttt'>U</span> represents
its unit name (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-15">IEC 60050, 112-01-15</a>)
or special unit name (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-16">IEC 60050, 112-01-16</a>)<a class='hidden_link' href='#qty.named.unit-2.sentence-2'>.</a></div> <div id='qty.named.unit-2.sentence-3' class='sentence'><span class='texttt'>Symbol</span> is its unit symbol (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-17">IEC 60050, 112-01-17</a>)<a class='hidden_link' href='#qty.named.unit-2.sentence-3'>.</a></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.named.unit.html#3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2716'>#</a></div><div class='texpara'><div id='qty.named.unit-3.sentence-1' class='sentence'>The possible arguments to <span class='texttt'>named_<span class='shy'></span>unit</span> are
<ul class='itemize'><li id='qty.named.unit-3.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.named.unit-3.1'>(3.1)</a></div><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">the unit symbol</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mtext MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.519em;">a kind of base quantity</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">a point origin</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.377em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mstyle" style="font-size: 113.1%; color: black;"><span class="mjx-mrow" style="font-size: 88.4%;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span>,</li><li id='qty.named.unit-3.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.named.unit-3.2'>(3.2)</a></div><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">the unit symbol</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span>,</li><li id='qty.named.unit-3.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.named.unit-3.3'>(3.3)</a></div><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">the unit symbol</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mtext MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">a unit expression</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">a point origin</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.377em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mstyle" style="font-size: 113.1%; color: black;"><span class="mjx-mrow" style="font-size: 88.4%;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span>, and</li><li id='qty.named.unit-3.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.named.unit-3.4'>(3.4)</a></div><span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">(</span></span><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">the unit symbol</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mtext MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">a unit expression</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-mtext MJXc-space1"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.519em;">a kind of quantity</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="margin-top: -0.144em; padding-bottom: 0.519em;">,</span></span><span class="mjx-msubsup MJXc-space1"><span class="mjx-base"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.519em;">a point origin</span></span></span><span class="mjx-sub" style="font-size: 70.7%; vertical-align: -0.377em; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mstyle" style="font-size: 113.1%; color: black;"><span class="mjx-mrow" style="font-size: 88.4%;"><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.298em;">o</span></span></span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.225em; padding-bottom: 0.446em;">p</span></span><span class="mjx-mi"><span class="mjx-char MJXc-TeX-main-I" style="padding-top: 0.372em; padding-bottom: 0.298em;">t</span></span></span></span></span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">)</span></span></span></span></span><a class='hidden_link' href='#qty.named.unit-3.sentence-1'>.</a></li></ul></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.named.unit.html#4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2729'>#</a></div><div class='texpara'><div id='qty.named.unit-4.sentence-1' class='sentence'>The first signature defines the unit of a base quantity
without a unit prefix (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-26">IEC 60050, 112-01-26</a>)<a class='hidden_link' href='#qty.named.unit-4.sentence-1'>.</a></div> <div id='qty.named.unit-4.sentence-2' class='sentence'>The second signature defines a unit
that can be reused by several base quantities<a class='hidden_link' href='#qty.named.unit-4.sentence-2'>.</a></div> <div id='qty.named.unit-4.sentence-3' class='sentence'>The third and fourth signatures with a unit expression argument <i >E</i>
define <span class='texttt'>U</span> as implicitly convertible from <i >E</i><a class='hidden_link' href='#qty.named.unit-4.sentence-3'>.</a></div> <div id='qty.named.unit-4.sentence-4' class='sentence'>The first and fourth signatures with a kind of quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-04">IEC 60050, 112-01-04</a>) <i >Q</i>
also restrict <span class='texttt'>U</span> to <i >Q</i><a class='hidden_link' href='#qty.named.unit-4.sentence-4'>.</a></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.named.unit.html#5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2739'>#</a></div><div class='texpara'><div id='qty.named.unit-5.sentence-1' class='sentence'>A point origin argument specifies the default point origin of <span class='texttt'>U</span> (<a href='#qty.pt.syn' title='5.7.4&emsp;Class template quantity_&shy;point'>[qty.<span class='shy'></span>pt.<span class='shy'></span>syn]</a>)<a class='hidden_link' href='#qty.named.unit-5.sentence-1'>.</a></div></div></div><div class='para nonNormativeOnly'><div class='marginalizedparent'><a class='marginalized' href='qty.named.unit.html#6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2742'>#</a></div><div class='texpara'><div id='qty.named.unit-example-1' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#qty.named.unit-example-1'>1</a></i>:&ensp;<span class='codeblock'><span class='comment'>// The first signature defines a base unit restricted to a kind of base quantity.</span>
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> second <span class='keyword'>final</span> <span class='operator'>:</span> named_unit<span class='anglebracket'>&lt;</span><span class='literal'>"s"</span>, kind_of<span class='anglebracket'>&lt;</span>time<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>}</span> second;
<span class='comment'>// The third and fourth signatures give a name to the unit argument.</span>
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> minute <span class='keyword'>final</span> <span class='operator'>:</span> named_unit<span class='anglebracket'>&lt;</span><span class='literal'>"min"</span>, mag<span class='anglebracket'>&lt;</span><span class='literal'>60</span><span class='anglebracket'>&gt;</span> <span class='operator'>*</span> second<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>}</span> minute; <span class='comment'>// <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">min</span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">60</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.372em;"> s</span></span></span></span></span></span></span>.</span>
<span class='comment'>// The fourth signature also further restricts the kind of quantity.</span>
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> hertz <span class='keyword'>final</span> <span class='operator'>:</span> named_unit<span class='anglebracket'>&lt;</span><span class='literal'>"Hz"</span>, inverse<span class='parenthesis'>(</span>second<span class='parenthesis'>)</span>, kind_of<span class='anglebracket'>&lt;</span>frequency<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>}</span> hertz; <span class='comment'>// <span class='math'><span class='textrm'>Hz</span></span> can't measure becquerel, activity,</span>
<span class='comment'>// or any other quantity with dimension <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">T</span></span></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.607em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;"></span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span></span></span></span></span>
<span class='comment'>// that isn't a kind of frequency.</span>
</span> —&nbsp;<i>end example</i>]</div></div></div></div></div><div id='qty.prefixed.unit' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.4.5.4</a> Prefixed <a class='abbr_ref' href='qty.prefixed.unit.html'>[qty.prefixed.unit]</a></h4><div class='texpara'><span id='lib:prefixed_unit'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:prefixed_unit'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>symbol_text Symbol, <a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude___________________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> M, <a href='#concept:PrefixableUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:PrefixableUnit__'><span class='tcode_in_codeblock'>PrefixableUnit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>struct</span> prefixed_unit <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span>M <span class='operator'>*</span> U<span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> prefixed_unit; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol <span class='operator'>+</span> U<span class='operator'>.</span><i >symbol</i>; <span class='comment'>// <i >exposition only</i></span>
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.prefixed.unit.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2777'>#</a></div><div class='texpara'><div id='qty.prefixed.unit-1.sentence-1' class='sentence'><span class='texttt'>prefixed_<span class='shy'></span>unit<span class='anglebracket'>&lt;</span>Symbol, M, U<span class='anglebracket'>&gt;</span></span> represents the unit <span class='texttt'>U</span> with a unit prefix (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-26">IEC 60050, 112-01-26</a>)<a class='hidden_link' href='#qty.prefixed.unit-1.sentence-1'>.</a></div> <div id='qty.prefixed.unit-1.sentence-2' class='sentence'><span class='texttt'>Symbol</span> is the symbol of the unit prefix<a class='hidden_link' href='#qty.prefixed.unit-1.sentence-2'>.</a></div> <div id='qty.prefixed.unit-1.sentence-3' class='sentence'><span class='texttt'>M</span> is the factor of the unit prefix<a class='hidden_link' href='#qty.prefixed.unit-1.sentence-3'>.</a></div> <div id='qty.prefixed.unit-1.sentence-4' class='sentence'>A specialization of <span class='texttt'>prefixed_<span class='shy'></span>unit</span> is used as a base type when defining a unit prefix<a class='hidden_link' href='#qty.prefixed.unit-1.sentence-4'>.</a></div> <div id='qty.prefixed.unit-example-1' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#qty.prefixed.unit-example-1'>1</a></i>:&ensp;<span class='codeblock'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PrefixableUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:PrefixableUnit___'><span class='tcode_in_codeblock'>PrefixableUnit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> kilo_ <span class='operator'>:</span> prefixed_unit<span class='anglebracket'>&lt;</span><span class='literal'>"k"</span>, mag_power<span class='anglebracket'>&lt;</span><span class='literal'>10</span>, <span class='literal'>3</span><span class='anglebracket'>&gt;</span>, U<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PrefixableUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:PrefixableUnit____'><span class='tcode_in_codeblock'>PrefixableUnit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> kilo_<span class='anglebracket'>&lt;</span>U<span class='anglebracket'>&gt;</span> kilo;
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> kilogram <span class='operator'>=</span> kilo<span class='anglebracket'>&lt;</span>si<span class='operator'>::</span>gram<span class='anglebracket'>&gt;</span>;
</span> —&nbsp;<i>end example</i>]</div></div></div></div></div><div id='qty.common.unit' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.4.5.5</a> Common <a class='abbr_ref' href='qty.common.unit.html'>[qty.common.unit]</a></h4><div class='texpara'><span id='lib:common_unit'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:common_unit'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U1, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U2, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Rest<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> common_unit <span class='keyword'>final</span> <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><i >get-common-scaled-unit</i><span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rest<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i>
<span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> common_unit; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >common-unit</i> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<i >get-common-scaled-unit</i><span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rest<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.common.unit.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2811'>#</a></div><div class='texpara'><div id='qty.common.unit-1.sentence-1' class='sentence'><span class='texttt'>common_<span class='shy'></span>unit</span> is used by the library
to encapsulate a conversion factor between units (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-33">IEC 60050, 112-01-33</a>)
common to the operands of quantity addition<a class='hidden_link' href='#qty.common.unit-1.sentence-1'>.</a></div> <div id='qty.common.unit-example-1' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#qty.common.unit-example-1'>1</a></i>:&ensp;<div id='qty.common.unit-1.sentence-2' class='sentence'>The result of <span class='texttt'><span class='literal'>1</span> <span class='operator'>*</span> km <span class='operator'>+</span> <span class='literal'>1</span> <span class='operator'>*</span> mi</span>
has a common unit <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">[</span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">8</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">/</span></span></span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">125</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">]</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.372em;"> m</span></span></span></span></span></span></span>
encapsulated by <span class='texttt'>common_<span class='shy'></span>unit<span class='anglebracket'>&lt;</span>mi, km<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.common.unit-1.sentence-2'>.</a></div> —&nbsp;<i>end example</i>]</div></div> <div id='qty.common.unit-1.sentence-3' class='sentence'>
A program that instantiates a specialization of <span class='texttt'>common_<span class='shy'></span>unit</span>
that is not a possible result of the library specifications
is ill-formed, no diagnostic required<a class='hidden_link' href='#qty.common.unit-1.sentence-3'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='qty.common.unit-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#qty.common.unit-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________'><span class='texttt'>Unit</span></span></a> U1, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________'><span class='texttt'>Unit</span></span></a> U2, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________'><span class='texttt'>Unit</span></span></a><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Rest<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='texttt'><i >get-common-scaled-unit</i></span><span class='parenthesis'>(</span>U1, U2, Rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> rest<span class='parenthesis'>)</span> <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
</code></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.common.unit.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2831'>#</a></div><div class='texpara'><div id='qty.common.unit-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>constexpr</span> <span class='keyword'>auto</span> res <span class='operator'>=</span> <span class='squarebracket'>[</span><span class='squarebracket'>]</span> <span class='curlybracket'>{</span>
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> canonical_lhs <span class='operator'>=</span> <i >get-canonical-unit</i><span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> canonical_rhs <span class='operator'>=</span> <i >get-canonical-unit</i><span class='parenthesis'>(</span>U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> common_mag <span class='operator'>=</span> <i >common-magnitude</i><span class='parenthesis'>(</span>canonical_lhs<span class='operator'>.</span>mag, canonical_rhs<span class='operator'>.</span>mag<span class='parenthesis'>)</span>;
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>common_mag <span class='operator'>=</span><span class='operator'>=</span> mag<span class='anglebracket'>&lt;</span><span class='literal'>1</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> canonical_lhs<span class='operator'>.</span>reference_unit;
<span class='keyword'>else</span>
<span class='keyword'>return</span> scaled_unit<span class='anglebracket'>&lt;</span>common_mag, <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>canonical_lhs<span class='operator'>.</span>reference_unit<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>rest<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>0</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> res;
<span class='keyword'>else</span>
<span class='keyword'>return</span> <i >get-common-scaled-unit</i><span class='parenthesis'>(</span>res, rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.common.unit.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2850'>#</a></div><div class='texpara'><div id='qty.common.unit-3.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='parenthesis'>(</span>convertible<span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>Rest<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>0</span> <span class='operator'>|</span><span class='operator'>|</span> <span class='keyword'>requires</span> <span class='curlybracket'>{</span>
<i >get-common-scaled-unit</i><span class='parenthesis'>(</span><i >get-common-scaled-unit</i><span class='parenthesis'>(</span>u1, u2<span class='parenthesis'>)</span>, rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
</span></div></div></div></div></div><div id='qty.derived.unit' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.4.5.6</a> Derived <a class='abbr_ref' href='qty.derived.unit.html'>[qty.derived.unit]</a></h4><div class='texpara'><span id='lib:derived_unit'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:derived_unit'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <i >derived-unit-impl</i> <span class='operator'>:</span> <span class='comment'>// <i >exposition only</i></span>
<i >unit-interface</i>,
<i >expr-fractions</i><span class='anglebracket'>&lt;</span><span class='keyword'>struct</span> one, Expr<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> <i >derived-unit-impl</i>; <span class='comment'>// <i >exposition only</i></span>
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:SymbolicConstant___________'></a><i >SymbolicConstant</i><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> derived_unit <span class='keyword'>final</span> <span class='operator'>:</span> <i >derived-unit-impl</i><span class='anglebracket'>&lt;</span>Expr<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.derived.unit.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2879'>#</a></div><div class='texpara'><div id='qty.derived.unit-1.sentence-1' class='sentence'><span class='texttt'>derived_<span class='shy'></span>unit</span> is used by the library
to represent a derived unit (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-19">IEC 60050, 112-01-19</a>)<a class='hidden_link' href='#qty.derived.unit-1.sentence-1'>.</a></div> <div id='qty.derived.unit-example-1' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#qty.derived.unit-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> m <span class='operator'>*</span> m; <span class='comment'>// error: cannot construct from <span class='tcode_in_codeblock'>derived_<span class='shy'></span>unit&lt;power&lt;si&#x200b;::&#x200b;metre, 2&gt;&gt;</span></span>
<span class='keyword'>int</span> y <span class='operator'>=</span> m <span class='operator'>*</span> s; <span class='comment'>// error: cannot construct from <span class='tcode_in_codeblock'>derived_<span class='shy'></span>unit&lt;si&#x200b;::&#x200b;metre, si&#x200b;::&#x200b;second&gt;</span></span>
<span class='keyword'>int</span> z <span class='operator'>=</span> m <span class='operator'>/</span> s; <span class='comment'>// error: cannot construct from <span class='tcode_in_codeblock'>derived_<span class='shy'></span>unit&lt;si&#x200b;::&#x200b;metre, per&lt;si&#x200b;::&#x200b;second&gt;&gt;</span></span>
</span> —&nbsp;<i>end example</i>]</div></div> <div id='qty.derived.unit-1.sentence-2' class='sentence'>
A program that instantiates a specialization of <span class='texttt'>derived_<span class='shy'></span>unit</span>
that is not a possible result of the library specifications
is ill-formed, no diagnostic required<a class='hidden_link' href='#qty.derived.unit-1.sentence-2'>.</a></div></div></div></div><div id='qty.unit.one' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.4.5.7</a> One <a class='abbr_ref' href='qty.unit.one.html'>[qty.unit.one]</a></h4><div class='texpara'><span id='lib:one_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:one_'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>struct</span> one <span class='keyword'>final</span> <span class='operator'>:</span> <i >derived-unit-impl</i><span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.one.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2905'>#</a></div><div class='texpara'><div id='qty.unit.one-1.sentence-1' class='sentence'><span class='texttt'>one</span> represents the base unit (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-18">IEC 60050, 112-01-18</a>) of a quantity of dimension one (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-13">IEC 60050, 112-01-13</a>)<a class='hidden_link' href='#qty.unit.one-1.sentence-1'>.</a></div></div></div></div></div><div id='qty.unit.ops' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.4.6</a> Operations <a class='abbr_ref' href='qty.unit.ops.html'>[qty.unit.ops]</a></h4><div class='texpara'><span id='lib:unit-interface'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unit-interface'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>struct</span> <i >unit-interface</i> <span class='curlybracket'>{</span> <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude____________________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> M, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>M, U u<span class='parenthesis'>)</span>;
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span>, <a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_____________________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude______________________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> M, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>M mag, U u<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#qty.unit.cmp' title='5.4.4.7&emsp;Comparison'>[qty.<span class='shy'></span>unit.<span class='shy'></span>cmp]</a>, comparison</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> equivalent<span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='texpara'><div id='lib:Unit,operator*'><div id='lib:operator*,Unit'><div id='lib:UnitMagnitude,operator*_'><div id='lib:operator*,UnitMagnitude_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,UnitMagnitude_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_______________________'><span class='texttt'>UnitMagnitude</span></span></a> M, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>M, U u<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.ops.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2949'>#</a></div><div class='texpara'><div id='qty.unit.ops-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>std<span class='operator'>::</span>is_same_v<span class='anglebracket'>&lt;</span>M, <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>mag<span class='anglebracket'>&lt;</span><span class='literal'>1</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> u;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-specialization-of</i><span class='anglebracket'>&lt;</span>U, scaled_unit<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>M<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> U<span class='operator'>::</span><i >mag</i> <span class='operator'>=</span><span class='operator'>=</span> mag<span class='anglebracket'>&lt;</span><span class='literal'>1</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> U<span class='operator'>::</span><i >reference-unit</i>;
<span class='keyword'>else</span>
<span class='keyword'>return</span> scaled_unit<span class='anglebracket'>&lt;</span>M<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> U<span class='operator'>::</span><i >mag</i>, <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>U<span class='operator'>::</span><i >reference-unit</i><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span> <span class='keyword'>else</span>
<span class='keyword'>return</span> scaled_unit<span class='anglebracket'>&lt;</span>M<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U<span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
</span></div></div></div></div><div class='texpara'><div class='itemdecl' id='qty.unit.ops-itemdecl:2'><div class='marginalizedparent'><a class='itemDeclLink' href='#qty.unit.ops-itemdecl:2'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span>, <a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude________________________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
</code></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.ops.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2970'>#</a></div><div class='texpara'><div id='qty.unit.ops-2.sentence-1' class='sentence'><i >Recommended practice</i>: Suggest swapping the operands<a class='hidden_link' href='#qty.unit.ops-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,operator/'><div id='lib:operator/,Unit'><div id='lib:UnitMagnitude,operator/_'><div id='lib:operator/,UnitMagnitude_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator/,UnitMagnitude_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2&emsp;Concepts&emsp;[qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_________________________'><span class='texttt'>UnitMagnitude</span></span></a> M, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>M mag, U u<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.ops.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2983'>#</a></div><div class='texpara'><div id='qty.unit.ops-3.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>mag <span class='operator'>*</span> inverse<span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.unit.ops-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,operator*_'><div id='lib:operator*,Unit_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,Unit_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________________________'><span class='texttt'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.ops.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L2995'>#</a></div><div class='texpara'><div id='qty.unit.ops-4.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='texttt'><i >expr-multiply</i></span><span class='anglebracket'>&lt;</span>derived_<span class='shy'></span>unit, <span class='keyword'>struct</span> one<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>lhs, rhs<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.unit.ops-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,operator/_'><div id='lib:operator/,Unit_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator/,Unit_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.ops.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3007'>#</a></div><div class='texpara'><div id='qty.unit.ops-5.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='texttt'><i >expr-divide</i></span><span class='anglebracket'>&lt;</span>derived_<span class='shy'></span>unit, <span class='keyword'>struct</span> one<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>lhs, rhs<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.unit.ops-5.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,inverse'><div id='lib:inverse,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:inverse,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> inverse<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.ops.html#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3018'>#</a></div><div class='texpara'><div id='qty.unit.ops-6.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>one <span class='operator'>/</span> u</span><a class='hidden_link' href='#qty.unit.ops-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,pow'><div id='lib:pow,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:pow,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>intmax_t Num, std<span class='operator'>::</span>intmax_t Den <span class='operator'>=</span> <span class='literal'>1</span>, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<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> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> pow<span class='parenthesis'>(</span>U u<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.ops.html#7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3031'>#</a></div><div class='texpara'><div id='qty.unit.ops-7.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='texttt'><i >expr-pow</i></span><span class='anglebracket'>&lt;</span>Num, Den, derived_<span class='shy'></span>unit, <span class='keyword'>struct</span> one<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.unit.ops-7.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,sqrt'><div id='lib:sqrt,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:sqrt,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> sqrt<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.ops.html#8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3042'>#</a></div><div class='texpara'><div id='qty.unit.ops-8.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>pow<span class='anglebracket'>&lt;</span><span class='literal'>1</span>, <span class='literal'>2</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.unit.ops-8.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,cbrt'><div id='lib:cbrt,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:cbrt,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> cbrt<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.ops.html#9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3053'>#</a></div><div class='texpara'><div id='qty.unit.ops-9.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>pow<span class='anglebracket'>&lt;</span><span class='literal'>1</span>, <span class='literal'>3</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.unit.ops-9.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,square'><div id='lib:square,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:square,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> square<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.ops.html#10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3064'>#</a></div><div class='texpara'><div id='qty.unit.ops-10.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>pow<span class='anglebracket'>&lt;</span><span class='literal'>2</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.unit.ops-10.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,cubic'><div id='lib:cubic,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:cubic,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> cubic<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.ops.html#11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3075'>#</a></div><div class='texpara'><div id='qty.unit.ops-11.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>pow<span class='anglebracket'>&lt;</span><span class='literal'>3</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.unit.ops-11.sentence-1'>.</a></div></div></div></div></div><div id='qty.unit.cmp' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.4.7</a> Comparison <a class='abbr_ref' href='qty.unit.cmp.html'>[qty.unit.cmp]</a></h4><div class='texpara'><div id='lib:Unit,operator=='><div id='lib:operator==,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator==,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.cmp.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3089'>#</a></div><div class='texpara'><div id='qty.unit.cmp-1.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>same_<span class='shy'></span>v<span class='anglebracket'>&lt;</span>Lhs, Rhs<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.unit.cmp-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,equivalent'><div id='lib:equivalent,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:equivalent,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> Rhs<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> equivalent<span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.cmp.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3101'>#</a></div><div class='texpara'><div id='qty.unit.cmp-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>const</span> <span class='keyword'>auto</span> lhs_canonical <span class='operator'>=</span> <i >get-canonical-unit</i><span class='parenthesis'>(</span>lhs<span class='parenthesis'>)</span>;
<span class='keyword'>const</span> <span class='keyword'>auto</span> rhs_canonical <span class='operator'>=</span> <i >get-canonical-unit</i><span class='parenthesis'>(</span>rhs<span class='parenthesis'>)</span>;
<span class='keyword'>return</span> lhs_canonical<span class='operator'>.</span>mag <span class='operator'>=</span><span class='operator'>=</span> rhs_canonical<span class='operator'>.</span>mag <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
lhs_canonical<span class='operator'>.</span>reference_unit <span class='operator'>=</span><span class='operator'>=</span> rhs_canonical<span class='operator'>.</span>reference_unit;
</span></div></div></div></div><div class='texpara'><div id='lib:Unit,convertible'><div id='lib:convertible,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:convertible,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> From, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> To<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> convertible<span class='parenthesis'>(</span>From from, To to<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.cmp.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3119'>#</a></div><div class='texpara'><div id='qty.unit.cmp-3.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>std<span class='operator'>::</span>is_same_v<span class='anglebracket'>&lt;</span>From, To<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> <span class='literal'>true</span>;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><a class='index' id='conceptref:PotentiallyConvertibleTo'></a><i >PotentiallyConvertibleTo</i><span class='anglebracket'>&lt;</span>From, To<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> std<span class='operator'>::</span>is_same_v<span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><i >get-canonical-unit</i><span class='parenthesis'>(</span>from<span class='parenthesis'>)</span><span class='operator'>.</span>reference_unit<span class='parenthesis'>)</span>,
<span class='keyword'>decltype</span><span class='parenthesis'>(</span><i >get-canonical-unit</i><span class='parenthesis'>(</span>to<span class='parenthesis'>)</span><span class='operator'>.</span>reference_unit<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>else</span>
<span class='keyword'>return</span> <span class='literal'>false</span>;
</span></div></div></div></div></div><div id='qty.unit.obs' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.4.8</a> Observers <a class='abbr_ref' href='qty.unit.obs.html'>[qty.unit.obs]</a></h4><div class='texpara'><div id='lib:AssociatedUnit,get_quantity_spec'><div id='lib:get_quantity_spec,AssociatedUnit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:get_quantity_spec,AssociatedUnit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> get_quantity_spec<span class='parenthesis'>(</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit_________________'><span class='texttt'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.obs.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3141'>#</a></div><div class='texpara'><div id='qty.unit.obs-1.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>kind_<span class='shy'></span>of<span class='anglebracket'>&lt;</span><span class='texttt'><i >get-associated-quantity</i></span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.unit.obs-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:AssociatedUnit,get_unit'><div id='lib:get_unit,AssociatedUnit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:get_unit,AssociatedUnit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> get_unit<span class='parenthesis'>(</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit__________________'><span class='texttt'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.obs.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3152'>#</a></div><div class='texpara'><div id='qty.unit.obs-2.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>u</span><a class='hidden_link' href='#qty.unit.obs-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,get_common_unit'><div id='lib:get_common_unit,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:get_common_unit,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> get_common_unit<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> us<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.obs.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3164'>#</a></div><div class='texpara'><div id='qty.unit.obs-3.sentence-1' class='sentence'>Let
<ul class='itemize'><li id='qty.unit.obs-3.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.unit.obs-3.1'>(3.1)</a></div><span class='texttt'>u1</span> be <span class='texttt'>us<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='squarebracket'>[</span><span class='literal'>0</span><span class='squarebracket'>]</span></span>,</li><li id='qty.unit.obs-3.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.unit.obs-3.2'>(3.2)</a></div><span class='texttt'>u2</span> be <span class='texttt'>us<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='squarebracket'>[</span><span class='literal'>1</span><span class='squarebracket'>]</span></span>,</li><li id='qty.unit.obs-3.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.unit.obs-3.3'>(3.3)</a></div><span class='texttt'>U1</span> be <span class='texttt'><span class='keyword'>decltype</span><span class='parenthesis'>(</span>u1<span class='parenthesis'>)</span></span>,</li><li id='qty.unit.obs-3.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.unit.obs-3.4'>(3.4)</a></div><span class='texttt'>U2</span> be <span class='texttt'><span class='keyword'>decltype</span><span class='parenthesis'>(</span>u2<span class='parenthesis'>)</span></span>, and</li><li id='qty.unit.obs-3.5'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.unit.obs-3.5'>(3.5)</a></div><span class='texttt'>rest</span> be a pack denoting the elements of <span class='texttt'>us</span> without <span class='texttt'>u1</span> and <span class='texttt'>u2</span><a class='hidden_link' href='#qty.unit.obs-3.sentence-1'>.</a></li></ul></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.obs.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3179'>#</a></div><div class='texpara'><div id='qty.unit.obs-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>us<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>1</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> u1;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>us<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>2</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>U1, common_unit<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='keyword'>return</span> <i >TBD.</i>;
<span class='curlybracket'>}</span> <span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>U2, common_unit<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> get_common_unit<span class='parenthesis'>(</span>u2, u1<span class='parenthesis'>)</span>;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>std<span class='operator'>::</span>is_same_v<span class='anglebracket'>&lt;</span>U1, U2<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> u1;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>equivalent<span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>U1, <span class='keyword'>typename</span> U2<span class='operator'>::</span><i >base-type</i><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> u1;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>U2, <span class='keyword'>typename</span> U1<span class='operator'>::</span><i >base-type</i><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> u2;
<span class='keyword'>else</span>
<span class='keyword'>return</span> std<span class='operator'>::</span>conditional_t<span class='anglebracket'>&lt;</span><i >type-less-impl</i><span class='anglebracket'>&lt;</span>U1, U2<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>, U1, U2<span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span> <span class='keyword'>else</span> <span class='curlybracket'>{</span>
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> canonical_lhs <span class='operator'>=</span> <i >get-canonical-unit</i><span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> canonical_rhs <span class='operator'>=</span> <i >get-canonical-unit</i><span class='parenthesis'>(</span>U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-positive-integral-power</i><span class='parenthesis'>(</span>canonical_lhs<span class='operator'>.</span>mag <span class='operator'>/</span> canonical_rhs<span class='operator'>.</span>mag<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> u2;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-positive-integral-power</i><span class='parenthesis'>(</span>canonical_rhs<span class='operator'>.</span>mag <span class='operator'>/</span> canonical_lhs<span class='operator'>.</span>mag<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> u1;
<span class='keyword'>else</span> <span class='curlybracket'>{</span>
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >type-less</i><span class='anglebracket'>&lt;</span>U1, U2<span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> common_unit<span class='anglebracket'>&lt;</span>U1, U2<span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='keyword'>else</span>
<span class='keyword'>return</span> common_unit<span class='anglebracket'>&lt;</span>U2, U1<span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>
<span class='curlybracket'>}</span> <span class='keyword'>else</span>
<span class='keyword'>return</span> get_common_unit<span class='parenthesis'>(</span>get_common_unit<span class='parenthesis'>(</span>u1, u2<span class='parenthesis'>)</span>, rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.obs.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3218'>#</a></div><div class='texpara'><div id='qty.unit.obs-5.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>us<span class='parenthesis'>)</span> <span class='operator'>!</span><span class='operator'>=</span> <span class='literal'>0</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>us<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>1</span> <span class='operator'>|</span><span class='operator'>|</span> <span class='comment'>//</span>
<span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>us<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>2</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> convertible<span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
<span class='keyword'>requires</span> <span class='curlybracket'>{</span> get_common_unit<span class='parenthesis'>(</span>get_common_unit<span class='parenthesis'>(</span>u1, u2<span class='parenthesis'>)</span>, rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
</span></div></div></div></div></div><div id='assoc.qty' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.4.9</a> Associated quantity <a class='abbr_ref' href='assoc.qty.html'>[assoc.qty]</a></h4><div class='texpara'><div id='lib:has-associated-quantity,Unit'><div id='lib:Unit,has-associated-quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:Unit,has-associated-quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='texttt'><i >has-associated-quantity</i></span><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='assoc.qty.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3237'>#</a></div><div class='texpara'><div id='assoc.qty-1.sentence-1' class='sentence'><i >Returns</i>: <ul class='itemize'><li id='assoc.qty-1.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-1.1'>(1.1)</a></div><div class='texpara'><div id='assoc.qty-1.1.sentence-1' class='sentence'>If <span class='texttt'>U<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >quantity-spec</i></span></span> is a valid expression,
returns <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#assoc.qty-1.1.sentence-1'>.</a></div></div></li><li id='assoc.qty-1.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-1.2'>(1.2)</a></div><div class='texpara'><div id='assoc.qty-1.2.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>U<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >reference-unit</i></span></span> is a valid expression,
returns
<span class='codeblock'><i >has-associated-quantity</i><span class='parenthesis'>(</span>U<span class='operator'>::</span><i >reference-unit</i><span class='parenthesis'>)</span>
</span></div></div></li><li id='assoc.qty-1.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-1.3'>(1.3)</a></div><div class='texpara'><div id='assoc.qty-1.3.sentence-1' class='sentence'>Otherwise, if
<span class='texttt'><span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'>&lt;</span>U, <span class='texttt'><i >expr-fractions</i></span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
is <span class='texttt'><span class='literal'>true</span></span>,
let <span class='texttt'>Nums</span> and <span class='texttt'>Dens</span>
be packs denoting the template arguments of
<span class='texttt'>U<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >nums</i></span></span> and <span class='texttt'>U<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >dens</i></span></span>, respectively<a class='hidden_link' href='#assoc.qty-1.3.sentence-1'>.</a></div> <div id='assoc.qty-1.3.sentence-2' class='sentence'>Returns
<span class='codeblock'><span class='parenthesis'>(</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <i >has-associated-quantity</i><span class='parenthesis'>(</span><i >expr-type</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'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <i >has-associated-quantity</i><span class='parenthesis'>(</span><i >expr-type</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></li><li id='assoc.qty-1.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-1.4'>(1.4)</a></div><div class='texpara'><div id='assoc.qty-1.4.sentence-1' class='sentence'>Otherwise, returns <span class='texttt'><span class='literal'>false</span></span><a class='hidden_link' href='#assoc.qty-1.4.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='texpara'><div id='lib:get-associated-quantity,AssociatedUnit'><div id='lib:AssociatedUnit,get-associated-quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:AssociatedUnit,get-associated-quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit___________________'><span class='texttt'>AssociatedUnit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >get-associated-quantity</i></span><span class='parenthesis'>(</span>U u<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='assoc.qty.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3273'>#</a></div><div class='texpara'><div id='assoc.qty-2.sentence-1' class='sentence'><i >Returns</i>: <ul class='itemize'><li id='assoc.qty-2.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-2.1'>(2.1)</a></div>If <span class='texttt'>U</span> is of the form <span class='texttt'>common_<span class='shy'></span>unit<span class='anglebracket'>&lt;</span>Us<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span></span>,
returns
<span class='codeblock'>get_common_quantity_spec<span class='parenthesis'>(</span><i >get-associated-quantity</i><span class='parenthesis'>(</span>Us<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>
</span></li><li id='assoc.qty-2.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-2.2'>(2.2)</a></div>Otherwise, if <span class='texttt'>U<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >quantity-spec</i></span></span> is a valid expression,
returns
<span class='codeblock'><i >remove-kind</i><span class='parenthesis'>(</span>U<span class='operator'>::</span><i >quantity-spec</i><span class='parenthesis'>)</span>
</span></li><li id='assoc.qty-2.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-2.3'>(2.3)</a></div>Otherwise, if <span class='texttt'>U<span class='operator'>&#x200b;::&#x200b;</span><span class='texttt'><i >reference-unit</i></span></span> is a valid expression,
returns
<span class='codeblock'><i >get-associated-quantity</i><span class='parenthesis'>(</span>U<span class='operator'>::</span><i >reference-unit</i><span class='parenthesis'>)</span>
</span></li><li id='assoc.qty-2.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-2.4'>(2.4)</a></div>Otherwise, if
<span class='texttt'><span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'>&lt;</span>U, <span class='texttt'><i >expr-fractions</i></span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
is <span class='texttt'><span class='literal'>true</span></span>,
returns
<span class='codeblock'><i >expr-map</i><span class='anglebracket'>&lt;</span><i >to-quantity-spec</i>, derived_quantity_spec, <span class='keyword'>struct</span> dimensionless<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span>
</span>
where <span class='texttt'><i >to-quantity-spec</i></span> is defined as follows:
<span class='codeblock'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit____________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>using</span> <i >to-quantity-spec</i> <span class='operator'>=</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><i >get-associated-quantity</i><span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</span></li></ul></div></div></div></div></div><div id='qty.unit.sym.fmt' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.4.10</a> Symbol formatting <a class='abbr_ref' href='qty.unit.sym.fmt.html'>[qty.unit.sym.fmt]</a></h4><div class='texpara'><div id='lib:Unit,unit_symbol_to'><div id='lib:unit_symbol_to,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unit_symbol_to,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> CharT <span class='operator'>=</span> <span class='keyword'>char</span>, std<span class='operator'>::</span>output_iterator<span class='anglebracket'>&lt;</span>CharT<span class='anglebracket'>&gt;</span> Out, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> Out unit_symbol_to<span class='parenthesis'>(</span>Out out, U u, <span class='keyword'>const</span> unit_symbol_formatting<span class='operator'>&amp;</span> fmt <span class='operator'>=</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.sym.fmt.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3319'>#</a></div><div class='texpara'><div id='qty.unit.sym.fmt-1.sentence-1' class='sentence'><i >Effects</i>: TBD<a class='hidden_link' href='#qty.unit.sym.fmt-1.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.sym.fmt.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3323'>#</a></div><div class='texpara'><div id='qty.unit.sym.fmt-2.sentence-1' class='sentence'><i >Returns</i>: TBD<a class='hidden_link' href='#qty.unit.sym.fmt-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:Unit,unit_symbol'><div id='lib:unit_symbol,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:unit_symbol,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>unit_symbol_formatting fmt <span class='operator'>=</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>, <span class='keyword'>typename</span> CharT <span class='operator'>=</span> <span class='keyword'>char</span>, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> std<span class='operator'>::</span>string_view unit_symbol<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unit.sym.fmt.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3335'>#</a></div><div class='texpara'><div id='qty.unit.sym.fmt-3.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'>TBD<span class='operator'>.</span>
</span></div></div></div></div></div></div><div id='qty.ref.concepts' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.4.5</a> Concepts <a class='abbr_ref' href='qty.ref.concepts.html'>[qty.ref.concepts]</a></h3><div class='texpara'><div class='itemdecl' id='concept:Reference'><div class='marginalizedparent'><a class='itemDeclLink' href='#concept:Reference'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='concept:Reference_'><span id='lib:Reference_'><span class='texttt'>Reference</span></span></span></a> <span class='operator'>=</span> <a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit_____________________'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span> <span class='parenthesis'>(</span><span class='texttt'><i >is-specialization-of</i></span><span class='anglebracket'>&lt;</span>T, reference<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div><div class='texpara'><div id='qty.ref.concepts-sentence-1' class='sentence'>A type <span class='texttt'>T</span> that satisfies <span class='texttt'>Reference</span>
represents the reference of a quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-01">IEC 60050, 112-01-01</a>)<a class='hidden_link' href='#qty.ref.concepts-sentence-1'>.</a></div></div><div class='texpara'><div class='itemdecl' id='concept:ReferenceOf'><div class='marginalizedparent'><a class='itemDeclLink' href='#concept:ReferenceOf'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:ReferenceOf' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='concept:ReferenceOf_'><span id='lib:ReferenceOf_'><span class='texttt'>ReferenceOf</span></span></span></a> <span class='operator'>=</span> <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference______________________'><span class='texttt'>Reference</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:QuantitySpecOf' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpecOf'><span class='texttt'>QuantitySpecOf</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>get_quantity_spec<span class='parenthesis'>(</span>T<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>, QS<span class='anglebracket'>&gt;</span>;
</code></div></div></div><div id='qty.ref.syn' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.4.6</a> Class template <span class='texttt'>reference</span> <a class='abbr_ref' href='qty.ref.syn.html'>[qty.ref.syn]</a></h3><div class='texpara'><span id='lib:reference,cbrt'><span id='lib:cbrt,reference'><span id='lib:reference,sqrt'><span id='lib:sqrt,reference'><span id='lib:reference,pow'><span id='lib:pow,reference'><span id='lib:reference,inverse'><span id='lib:inverse,reference'><span id='lib:AssociatedUnit,operator/'><span id='lib:operator/,AssociatedUnit'><span id='lib:reference,operator/'><span id='lib:operator/,reference'><span id='lib:AssociatedUnit,operator*'><span id='lib:operator*,AssociatedUnit'><span id='lib:reference,operator*'><span id='lib:operator*,reference'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,reference'>🔗</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><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec______________________________________________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> Q, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>using</span> <i >reference-t</i> <span class='operator'>=</span> reference<span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>Q<span class='parenthesis'>)</span>, <span class='keyword'>decltype</span><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_______________________________________________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Q, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <span id='lib:reference'><a class='hidden_link' href='#lib:reference' title='5.4.6&emsp;Class template reference&emsp;[qty.ref.syn]'>reference</a></span> <span class='curlybracket'>{</span>
<span class='comment'>// <a href='#qty.ref.ops' title='5.4.7&emsp;Operations'>[qty.<span class='shy'></span>ref.<span class='shy'></span>ops]</a>, operations</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q2, <span class='keyword'>typename</span> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>reference, reference<span class='anglebracket'>&lt;</span>Q2, U2<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit______________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>reference, U2<span class='parenthesis'>)</span>
<span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> get_quantity_spec<span class='parenthesis'>(</span>U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, U<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit_______________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U1<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>U1, reference<span class='parenthesis'>)</span>
<span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span> <span class='operator'>*</span> Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q2, <span class='keyword'>typename</span> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>reference, reference<span class='anglebracket'>&lt;</span>Q2, U2<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>/</span> Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>/</span> U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit________________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>reference, U2<span class='parenthesis'>)</span>
<span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>/</span> get_quantity_spec<span class='parenthesis'>(</span>U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, U<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>/</span> U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit_________________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U1<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>U1, reference<span class='parenthesis'>)</span>
<span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span> <span class='operator'>/</span> Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>/</span> U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> inverse<span class='parenthesis'>(</span>reference<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>inverse<span class='parenthesis'>(</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, inverse<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>intmax_t Num, std<span class='operator'>::</span>intmax_t Den <span class='operator'>=</span> <span class='literal'>1</span><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'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> pow<span class='parenthesis'>(</span>reference<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>pow<span class='anglebracket'>&lt;</span>Num, Den<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, pow<span class='anglebracket'>&lt;</span>Num, Den<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> sqrt<span class='parenthesis'>(</span>reference<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>sqrt<span class='parenthesis'>(</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, sqrt<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> cbrt<span class='parenthesis'>(</span>reference<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>cbrt<span class='parenthesis'>(</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, cbrt<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>;
<span class='comment'>// <a href='#qty.ref.cmp' title='5.4.8&emsp;Comparison'>[qty.<span class='shy'></span>ref.<span class='shy'></span>cmp]</a>, comparison</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q2, <span class='keyword'>typename</span> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>reference, reference<span class='anglebracket'>&lt;</span>Q2, U2<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit__________________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>reference, U2 u2<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q2, <span class='keyword'>typename</span> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> convertible<span class='parenthesis'>(</span>reference, reference<span class='anglebracket'>&lt;</span>Q2, U2<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit___________________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> convertible<span class='parenthesis'>(</span>reference, U2 u2<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit____________________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U1<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> convertible<span class='parenthesis'>(</span>U1 u1, reference<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.syn.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3431'>#</a></div><div class='texpara'><div id='qty.ref.syn-1.sentence-1' class='sentence'><span class='texttt'>reference<span class='anglebracket'>&lt;</span>Q, U<span class='anglebracket'>&gt;</span></span> represents the reference of a quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-01">IEC 60050, 112-01-01</a>)<a class='hidden_link' href='#qty.ref.syn-1.sentence-1'>.</a></div> <div id='qty.ref.syn-1.sentence-2' class='sentence'>The unit of measurement <span class='texttt'>U</span> (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-14">IEC 60050, 112-01-14</a>)
is used to measure a value of the quantity <span class='texttt'>Q</span> (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-28">IEC 60050, 112-01-28</a>)<a class='hidden_link' href='#qty.ref.syn-1.sentence-2'>.</a></div> <div id='qty.ref.syn-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#qty.ref.syn-note-1'>1</a></i>:&ensp;<div id='qty.ref.syn-1.sentence-3' class='sentence'><span class='texttt'>reference</span> is typically implicitly instantiated
when specifying that a unit measures a more specific quantity<a class='hidden_link' href='#qty.ref.syn-1.sentence-3'>.</a></div> <div id='qty.ref.syn-example-1' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#qty.ref.syn-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'>auto</span> x <span class='operator'>=</span> <span class='literal'>1</span> <span class='operator'>*</span> m; <span class='comment'>// measures a length</span>
<span class='keyword'>auto</span> y <span class='operator'>=</span> <span class='literal'>1</span> <span class='operator'>*</span> isq<span class='operator'>::</span>width<span class='squarebracket'>[</span>m<span class='squarebracket'>]</span>; <span class='comment'>// measures a width</span>
<span class='keyword'>auto</span> z <span class='operator'>=</span> <span class='literal'>1</span> <span class='operator'>*</span> isq<span class='operator'>::</span>diameter<span class='squarebracket'>[</span>m<span class='squarebracket'>]</span>; <span class='comment'>// measures a diameter</span>
</span> —&nbsp;<i>end example</i>]</div></div> —&nbsp;<i>end note</i>]</div></div></div></div></div><div id='qty.ref.ops' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.4.7</a> Operations <a class='abbr_ref' href='qty.ref.ops.html'>[qty.ref.ops]</a></h3><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.ops.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3450'>#</a></div><div class='texpara'><div id='qty.ref.ops-1.sentence-1' class='sentence'>Each member function with a <span class='textsf'><i >trailing-return-type</i></span>
of <span class='texttt'><span class='operator'>-</span><span class='anglebracket'>&gt;</span> <span class='texttt'><i >reference-t</i></span><span class='anglebracket'>&lt;</span>T<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>&gt;</span></span>
returns <span class='texttt'><span class='curlybracket'>{</span><span class='curlybracket'>}</span></span><a class='hidden_link' href='#qty.ref.ops-1.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:Reference,operator*'><div id='lib:operator*,Reference'><div id='lib:Representation,operator*'><div id='lib:operator*,Representation'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,Representation'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdRep, <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_______________________'><span class='texttt'>Reference</span></span></a> R,
<a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf______'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> Rep <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdRep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a class='index' id='conceptref:OffsetUnit__'></a><span class='texttt'><i >OffsetUnit</i></span><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>get_unit<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> quantity<span class='anglebracket'>&lt;</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rep<span class='anglebracket'>&gt;</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>FwdRep<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, R r<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.ops.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3465'>#</a></div><div class='texpara'><div id='qty.ref.ops-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> quantity<span class='curlybracket'>{</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>FwdRep<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>lhs<span class='parenthesis'>)</span>, r<span class='curlybracket'>}</span>;</span></div></div></div></div><div class='texpara'><div id='lib:Reference,operator*_'><div id='lib:operator*,Reference_'><div id='lib:Representation,operator*_'><div id='lib:operator*,Representation_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,Representation_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdRep, <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference________________________'><span class='texttt'>Reference</span></span></a> R,
<a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf_______'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> Rep <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdRep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a class='index' id='conceptref:OffsetUnit___'></a><span class='texttt'><i >OffsetUnit</i></span><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>get_unit<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity______________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>FwdRep<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, R<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.ops.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3481'>#</a></div><div class='texpara'><div id='qty.ref.ops-3.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> quantity<span class='curlybracket'>{</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>FwdRep<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>lhs<span class='parenthesis'>)</span>, inverse<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='curlybracket'>}</span>;</span></div></div></div></div><div class='texpara'><div id='lib:Reference,operator/'><div id='lib:operator/,Reference'><div id='lib:quantity,operator/'><div id='lib:operator/,quantity'><div id='lib:Reference,operator*__'><div id='lib:operator*,Reference__'><div id='lib:quantity,operator*'><div id='lib:operator*,quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_________________________'><span class='texttt'>Reference</span></span></a> R, <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_______________________'><span class='texttt'>Quantity</span></span></a> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q, R<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference__________________________'><span class='texttt'>Reference</span></span></a> R, <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_________________________'><span class='texttt'>Quantity</span></span></a> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity__________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q, R<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.ops.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3499'>#</a></div><div class='texpara'><div id='qty.ref.ops-4.sentence-1' class='sentence'>Let <span class='texttt'>@</span> be the <span class='textsf'><i >operator</i></span><a class='hidden_link' href='#qty.ref.ops-4.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.ops.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3502'>#</a></div><div class='texpara'><div id='qty.ref.ops-5.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> quantity<span class='curlybracket'>{</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span><span class='operator'>.</span><i >numerical-value</i>, Q<span class='operator'>::</span>reference @ R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='curlybracket'>}</span>;
</span></div></div></div></div><div class='texpara'><div class='itemdecl' id='qty.ref.ops-itemdecl:4'><div class='marginalizedparent'><a class='itemDeclLink' href='#qty.ref.ops-itemdecl:4'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference___________________________'><span class='texttt'>Reference</span></span></a> R, <span class='keyword'>typename</span> Rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span>, get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>R, Rep<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference____________________________'><span class='texttt'>Reference</span></span></a> R, <span class='keyword'>typename</span> Rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf_________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span>, get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>R, Rep<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_____________________________'><span class='texttt'>Reference</span></span></a> R, <span class='keyword'>typename</span> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity___________________________'><span class='texttt'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>R, Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference______________________________'><span class='texttt'>Reference</span></span></a> R, <span class='keyword'>typename</span> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity____________________________'><span class='texttt'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>R, Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
</code></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.ops.html#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3529'>#</a></div><div class='texpara'><div id='qty.ref.ops-6.sentence-1' class='sentence'><i >Recommended practice</i>: Suggest swapping the operands<a class='hidden_link' href='#qty.ref.ops-6.sentence-1'>.</a></div></div></div></div></div><div id='qty.ref.cmp' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.4.8</a> Comparison <a class='abbr_ref' href='qty.ref.cmp.html'>[qty.ref.cmp]</a></h3><div class='texpara'><div id='lib:reference,operator=='><div id='lib:operator==,reference'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator==,reference'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q2, <span class='keyword'>typename</span> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>reference, reference<span class='anglebracket'>&lt;</span>Q2, U2<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.cmp.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3543'>#</a></div><div class='texpara'><div id='qty.ref.cmp-1.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>=</span><span class='operator'>=</span> Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> U<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>=</span><span class='operator'>=</span> U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span></span><a class='hidden_link' href='#qty.ref.cmp-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:AssociatedUnit,operator=='><div id='lib:operator==,AssociatedUnit'><div id='lib:reference,operator==_'><div id='lib:operator==,reference_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator==,reference_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit_____________________________'><span class='texttt'>AssociatedUnit</span></span></a> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>reference, U2 u2<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.cmp.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3556'>#</a></div><div class='texpara'><div id='qty.ref.cmp-2.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>=</span><span class='operator'>=</span> get_<span class='shy'></span>quantity_<span class='shy'></span>spec<span class='parenthesis'>(</span>u2<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> U<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>=</span><span class='operator'>=</span> u2</span><a class='hidden_link' href='#qty.ref.cmp-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:reference,convertible'><div id='lib:convertible,reference'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:convertible,reference'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q2, <span class='keyword'>typename</span> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> convertible<span class='parenthesis'>(</span>reference, reference<span class='anglebracket'>&lt;</span>Q2, U2<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.cmp.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3568'>#</a></div><div class='texpara'><div id='qty.ref.cmp-3.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>implicitly_<span class='shy'></span>convertible<span class='parenthesis'>(</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> convertible<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.ref.cmp-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:AssociatedUnit,convertible'><div id='lib:convertible,AssociatedUnit'><div id='lib:reference,convertible_'><div id='lib:convertible,reference_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:convertible,reference_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit______________________________'><span class='texttt'>AssociatedUnit</span></span></a> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> convertible<span class='parenthesis'>(</span>reference, U2 u2<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.cmp.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3581'>#</a></div><div class='texpara'><div id='qty.ref.cmp-4.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>implicitly_<span class='shy'></span>convertible<span class='parenthesis'>(</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, get_<span class='shy'></span>quantity_<span class='shy'></span>spec<span class='parenthesis'>(</span>u2<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> convertible<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, u2<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.ref.cmp-4.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:AssociatedUnit,convertible_'><div id='lib:convertible,AssociatedUnit_'><div id='lib:reference,convertible__'><div id='lib:convertible,reference__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:convertible,reference__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit_______________________________'><span class='texttt'>AssociatedUnit</span></span></a> U1<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> convertible<span class='parenthesis'>(</span>U1 u1, reference<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.cmp.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3594'>#</a></div><div class='texpara'><div id='qty.ref.cmp-5.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>implicitly_<span class='shy'></span>convertible<span class='parenthesis'>(</span>get_<span class='shy'></span>quantity_<span class='shy'></span>spec<span class='parenthesis'>(</span>u1<span class='parenthesis'>)</span>, Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> convertible<span class='parenthesis'>(</span>u1, U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.ref.cmp-5.sentence-1'>.</a></div></div></div></div></div><div id='qty.ref.obs' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.4.9</a> Observers <a class='abbr_ref' href='qty.ref.obs.html'>[qty.ref.obs]</a></h3><div class='texpara'><div id='lib:reference,get_quantity_spec'><div id='lib:get_quantity_spec,reference'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:get_quantity_spec,reference'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q, <span class='keyword'>typename</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec________________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> get_quantity_spec<span class='parenthesis'>(</span>reference<span class='anglebracket'>&lt;</span>Q, U<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.obs.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3608'>#</a></div><div class='texpara'><div id='qty.ref.obs-1.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span></span><a class='hidden_link' href='#qty.ref.obs-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:reference,get_unit'><div id='lib:get_unit,reference'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:get_unit,reference'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q, <span class='keyword'>typename</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> get_unit<span class='parenthesis'>(</span>reference<span class='anglebracket'>&lt;</span>Q, U<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.obs.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3620'>#</a></div><div class='texpara'><div id='qty.ref.obs-2.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span></span><a class='hidden_link' href='#qty.ref.obs-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:AssociatedUnit,get_common_reference'><div id='lib:get_common_reference,AssociatedUnit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:get_common_reference,AssociatedUnit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit________________________________'><span class='texttt'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> <span id='lib:get_common_reference'><a class='hidden_link' href='#lib:get_common_reference' title='5.4.9&emsp;Observers&emsp;[qty.ref.obs]'>get_common_reference</a></span><span class='parenthesis'>(</span><a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit_________________________________'><span class='texttt'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> u1,
<a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit__________________________________'><span class='texttt'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> u2,
<a href='#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit___________________________________'><span class='texttt'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> rest<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.obs.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3634'>#</a></div><div class='texpara'><div id='qty.ref.obs-3.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>get_<span class='shy'></span>common_<span class='shy'></span>unit<span class='parenthesis'>(</span>u1, u2, rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.ref.obs-3.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.obs.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3638'>#</a></div><div class='texpara'><div id='qty.ref.obs-4.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='keyword'>requires</span> <span class='curlybracket'>{</span>
get_common_quantity_spec<span class='parenthesis'>(</span>get_quantity_spec<span class='parenthesis'>(</span>u1<span class='parenthesis'>)</span>, get_quantity_spec<span class='parenthesis'>(</span>u2<span class='parenthesis'>)</span>,
get_quantity_spec<span class='parenthesis'>(</span>rest<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
<span class='curlybracket'>{</span> get_common_unit<span class='parenthesis'>(</span>u1, u2, rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span> <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> AssociatedUnit;
<span class='curlybracket'>}</span>
</span></div></div></div></div><div class='texpara'><div id='lib:reference,get_common_reference'><div id='lib:get_common_reference,reference'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:get_common_reference,reference'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_______________________________'><span class='texttt'>Reference</span></span></a> R1, <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference________________________________'><span class='texttt'>Reference</span></span></a> R2, <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_________________________________'><span class='texttt'>Reference</span></span></a><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Rest<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference__________________________________'><span class='texttt'>Reference</span></span></a> <span class='keyword'>auto</span> <span id='lib:get_common_reference_'><a class='hidden_link' href='#lib:get_common_reference' title='5.4.9&emsp;Observers&emsp;[qty.ref.obs]'>get_common_reference</a></span><span class='parenthesis'>(</span>R1 r1, R2 r2, Rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> rest<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.obs.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3658'>#</a></div><div class='texpara'><div id='qty.ref.obs-5.sentence-1' class='sentence'><i >Returns</i>: <span class='codeblock'><i >reference-t</i><span class='anglebracket'>&lt;</span>get_common_quantity_spec<span class='parenthesis'>(</span>get_quantity_spec<span class='parenthesis'>(</span>R1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, get_quantity_spec<span class='parenthesis'>(</span>R2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>,
get_quantity_spec<span class='parenthesis'>(</span>rest<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>,
get_common_unit<span class='parenthesis'>(</span>get_unit<span class='parenthesis'>(</span>R1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, get_unit<span class='parenthesis'>(</span>R2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, get_unit<span class='parenthesis'>(</span>rest<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.ref.obs.html#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3666'>#</a></div><div class='texpara'><div id='qty.ref.obs-6.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='keyword'>requires</span> <span class='curlybracket'>{</span>
get_common_quantity_spec<span class='parenthesis'>(</span>get_quantity_spec<span class='parenthesis'>(</span>r1<span class='parenthesis'>)</span>, get_quantity_spec<span class='parenthesis'>(</span>r2<span class='parenthesis'>)</span>,
get_quantity_spec<span class='parenthesis'>(</span>rest<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
get_common_unit<span class='parenthesis'>(</span>get_unit<span class='parenthesis'>(</span>r1<span class='parenthesis'>)</span>, get_unit<span class='parenthesis'>(</span>r2<span class='parenthesis'>)</span>, get_unit<span class='parenthesis'>(</span>rest<span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>
</span></div></div></div></div></div></div><div id='qty.rep' class='section'><h2 ><a class='secnum' style='min-width:65pt'>5.5</a> Representation <a class='abbr_ref' href='qty.rep.html'>[qty.rep]</a></h2><div id='qty.rep.general' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.5.1</a> General <a class='abbr_ref' href='qty.rep.general.html'>[qty.rep.general]</a></h3><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.rep.general.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3682'>#</a></div><div class='texpara'><div id='qty.rep.general-1.sentence-1' class='sentence'>Subclause <a href='#qty.rep' title='5.5&emsp;Representation'>[qty.<span class='shy'></span>rep]</a> specifies the components
used to constrain the numerical value of a quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-29">IEC 60050, 112-01-29</a>)<a class='hidden_link' href='#qty.rep.general-1.sentence-1'>.</a></div></div></div></div><div id='qty.rep.traits' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.5.2</a> Traits <a class='abbr_ref' href='qty.rep.traits.html'>[qty.rep.traits]</a></h3><div id='qty.fp.traits' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.5.2.1</a> Floating-point <a class='abbr_ref' href='qty.fp.traits.html'>[qty.fp.traits]</a></h4><div class='texpara'><div class='itemdecl' id='qty.fp.traits-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#qty.fp.traits-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <span class='texttt'><i >actual-value-type</i></span> <span class='operator'>:</span> <span class='texttt'><i >cond-value-type</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>; <span class='comment'>// see <a href="https://wg21.link/readable.traits">N4971, [readable.traits]</a></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>std<span class='operator'>::</span>is_pointer_v<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='operator'>!</span>std<span class='operator'>::</span>is_array_v<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='keyword'>requires</span> <span class='curlybracket'>{</span> <span class='keyword'>typename</span> std<span class='operator'>::</span>indirectly_readable_traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>value_type; <span class='curlybracket'>}</span>
<span class='keyword'>struct</span> <span class='texttt'><i >actual-value-type</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>:</span> std<span class='operator'>::</span>indirectly_readable_traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>using</span> <span class='texttt'><i >actual-value-type-t</i></span> <span class='operator'>=</span> <span class='texttt'><i >actual-value-type</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>value_type;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> <span id='lib:treat_as_floating_point'><a class='hidden_link' href='#lib:treat_as_floating_point' title='5.5.2.1&emsp;Floating-point&emsp;[qty.fp.traits]'>treat_as_floating_point</a></span> <span class='operator'>=</span>
std<span class='operator'>::</span>chrono<span class='operator'>::</span>treat_as_floating_point_v<span class='anglebracket'>&lt;</span><span class='texttt'><i >actual-value-type-t</i></span><span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
</code></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.fp.traits.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3708'>#</a></div><div class='texpara'><div id='qty.fp.traits-1.sentence-1' class='sentence'><span class='texttt'>quantity</span> and <span class='texttt'>quantity_<span class='shy'></span>point</span> use <span class='texttt'>treat_<span class='shy'></span>as_<span class='shy'></span>floating_<span class='shy'></span>point</span>
to help determine whether implicit conversions are allowed among them<a class='hidden_link' href='#qty.fp.traits-1.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.fp.traits.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3712'>#</a></div><div class='texpara'><div id='qty.fp.traits-2.sentence-1' class='sentence'><i >Remarks</i>: Pursuant to <a href="https://wg21.link/namespace.std">N4971, [namespace.std]</a> (<a href='#spec.ext' title='4.1&emsp;External'>[spec.<span class='shy'></span>ext]</a>),
users may specialize <span class='texttt'>treat_<span class='shy'></span>as_<span class='shy'></span>floating_<span class='shy'></span>point</span>
for cv-unqualified program-defined types<a class='hidden_link' href='#qty.fp.traits-2.sentence-1'>.</a></div> <div id='qty.fp.traits-2.sentence-2' class='sentence'>Such specializations shall be usable in constant expressions (<a href="https://wg21.link/expr.const">N4971, [expr.const]</a>)
and have type <span class='texttt'><span class='keyword'>const</span> <span class='keyword'>bool</span></span><a class='hidden_link' href='#qty.fp.traits-2.sentence-2'>.</a></div></div></div></div></div><div id='qty.char.traits' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.5.2.2</a> Quantity character <a class='abbr_ref' href='qty.char.traits.html'>[qty.char.traits]</a></h4><div class='texpara'><div id='lib:disable_vector'><div id='lib:disable_complex'><div id='lib:disable_scalar'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:disable_scalar'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> disable_scalar <span class='operator'>=</span> <span class='literal'>false</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> disable_complex <span class='operator'>=</span> <span class='literal'>false</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> disable_vector <span class='operator'>=</span> <span class='literal'>false</span>;
</code></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.char.traits.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3736'>#</a></div><div class='texpara'><div id='qty.char.traits-1.sentence-1' class='sentence'>Some quantities are defined as having a numerical value (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-29">IEC 60050, 112-01-29</a>) of a specific set (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-01-02">IEC 60050, 102-01-02</a>)<a class='hidden_link' href='#qty.char.traits-1.sentence-1'>.</a></div> <div id='qty.char.traits-1.sentence-2' class='sentence'>The representation concepts use these traits
to help determine the sets <span class='texttt'>T</span> represents<a class='hidden_link' href='#qty.char.traits-1.sentence-2'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.char.traits.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3741'>#</a></div><div class='texpara'><div id='qty.char.traits-2.sentence-1' class='sentence'><i >Remarks</i>: Pursuant to <a href="https://wg21.link/namespace.std">N4971, [namespace.std]</a> (<a href='#spec.ext' title='4.1&emsp;External'>[spec.<span class='shy'></span>ext]</a>),
users may specialize these templates
for cv-unqualified program-defined types<a class='hidden_link' href='#qty.char.traits-2.sentence-1'>.</a></div> <div id='qty.char.traits-2.sentence-2' class='sentence'>Such specializations shall be usable in constant expressions (<a href="https://wg21.link/expr.const">N4971, [expr.const]</a>)
and have type <span class='texttt'><span class='keyword'>const</span> <span class='keyword'>bool</span></span><a class='hidden_link' href='#qty.char.traits-2.sentence-2'>.</a></div></div></div></div><div class='para nonNormativeOnly'><div class='marginalizedparent'><a class='marginalized' href='qty.char.traits.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3749'>#</a></div><div class='texpara'><div id='qty.char.traits-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#qty.char.traits-note-1'>1</a></i>:&ensp;<div id='qty.char.traits-3.sentence-1' class='sentence'>These templates prevent use of representation types with the library
that satisfy but do not in fact model their corresponding concept<a class='hidden_link' href='#qty.char.traits-3.sentence-1'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div></div></div><div id='qty.val.traits' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.5.2.3</a> Values <a class='abbr_ref' href='qty.val.traits.html'>[qty.val.traits]</a></h4><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.val.traits.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3758'>#</a></div><div class='texpara'><div id='qty.val.traits-1.sentence-1' class='sentence'><span class='texttt'>quantity</span> and <span class='texttt'>quantity_<span class='shy'></span>point</span> use <span class='texttt'>representation_<span class='shy'></span>values</span>
to construct special values of its representation type<a class='hidden_link' href='#qty.val.traits-1.sentence-1'>.</a></div></div><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <span id='lib:representation_values'><a class='hidden_link' href='#lib:representation_values' title='5.5.2.3&emsp;Values&emsp;[qty.val.traits]'>representation_values</a></span> <span class='operator'>:</span> std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration_values<span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> Rep one<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.val.traits.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3773'>#</a></div><div class='texpara'><div id='qty.val.traits-2.sentence-1' class='sentence'>The requirements on <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>chrono<span class='operator'>&#x200b;::&#x200b;</span>duration_<span class='shy'></span>values<span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span></span> (<a href="https://wg21.link/time.traits.duration.values">N4971, [time.traits.duration.values]</a>)
also apply to <span class='texttt'>representation_<span class='shy'></span>values<span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.val.traits-2.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='qty.val.traits-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#qty.val.traits-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>static</span> <span class='keyword'>constexpr</span> Rep one<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
</code></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.val.traits.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3782'>#</a></div><div class='texpara'><div id='qty.val.traits-3.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>Rep<span class='parenthesis'>(</span><span class='literal'>1</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.val.traits-3.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.val.traits.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3786'>#</a></div><div class='texpara'><div id='qty.val.traits-4.sentence-1' class='sentence'><i >Remarks</i>: The value returned shall be the neutral element for multiplication (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-01-19">IEC 60050, 102-01-19</a>)<a class='hidden_link' href='#qty.val.traits-4.sentence-1'>.</a></div></div></div></div></div></div><div id='qty.rep.cpos' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.5.3</a> Customization point objects <a class='abbr_ref' href='qty.rep.cpos.html'>[qty.rep.cpos]</a></h3><div id='qty.rep.cpos.general' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.5.3.1</a> General <a class='abbr_ref' href='qty.rep.cpos.general.html'>[qty.rep.cpos.general]</a></h4><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.rep.cpos.general.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3795'>#</a></div><div class='texpara'><div id='qty.rep.cpos.general-1.sentence-1' class='sentence'>Within subclause <a href='#qty.rep.cpos' title='5.5.3&emsp;Customization point objects'>[qty.<span class='shy'></span>rep.<span class='shy'></span>cpos]</a>,
<a class='hidden_link' href='#def:reified_object' id='def:reified_object'><i>reified object</i></a> is as defined in <a href="https://wg21.link/range.access.general">N4971, [range.access.general]</a><a class='hidden_link' href='#qty.rep.cpos.general-1.sentence-1'>.</a></div></div></div></div><div id='qty.real.cpo' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.5.3.2</a> <span class='texttt'>mp_<span class='shy'></span>units&#x200b;::&#x200b;real</span> <a class='abbr_ref' href='qty.real.cpo.html'>[qty.real.cpo]</a></h4><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.real.cpo.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3801'>#</a></div><div class='texpara'><div id='qty.real.cpo-1.sentence-1' class='sentence'>The name <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>real</span> denotes a customization point object (<a href="https://wg21.link/customization.point.object">N4971, [customization.point.object]</a>)<a class='hidden_link' href='#qty.real.cpo-1.sentence-1'>.</a></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.real.cpo.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3804'>#</a></div><div class='texpara'><div id='qty.real.cpo-2.sentence-1' class='sentence'>Given a subexpression <span class='texttt'>E</span> with type <span class='texttt'>T</span>,
let <span class='texttt'>t</span> be an lvalue that denotes the reified object for <span class='texttt'>E</span><a class='hidden_link' href='#qty.real.cpo-2.sentence-1'>.</a></div> <div id='qty.real.cpo-2.sentence-2' class='sentence'>Then:
<ul class='itemize'><li id='qty.real.cpo-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.real.cpo-2.1'>(2.1)</a></div><div class='texpara'><div id='qty.real.cpo-2.1.sentence-1' class='sentence'>If <span class='texttt'>T</span> does not model <a href='#concept:WeaklyRegular' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:WeaklyRegular'><span class='texttt'><i >WeaklyRegular</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>real<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is ill-formed<a class='hidden_link' href='#qty.real.cpo-2.1.sentence-1'>.</a></div></div></li><li id='qty.real.cpo-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.real.cpo-2.2'>(2.2)</a></div><div class='texpara'><div id='qty.real.cpo-2.2.sentence-1' class='sentence'>If <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>real<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar'><span class='texttt'><i >Scalar</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>real<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>real<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.real.cpo-2.2.sentence-1'>.</a></div></div></li><li id='qty.real.cpo-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.real.cpo-2.3'>(2.3)</a></div><div class='texpara'><div id='qty.real.cpo-2.3.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>T</span> is a class or enumeration type and
<span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>real<span class='parenthesis'>(</span>t<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar_'><span class='texttt'><i >Scalar</i></span></span></a>
where the meaning of <span class='texttt'>real</span> is established as-if by performing argument-dependent lookup only (<a href="https://wg21.link/basic.lookup.argdep">N4971, [basic.lookup.argdep]</a>),
then <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>real<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to that expression<a class='hidden_link' href='#qty.real.cpo-2.3.sentence-1'>.</a></div></div></li><li id='qty.real.cpo-2.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.real.cpo-2.4'>(2.4)</a></div><div class='texpara'><div id='qty.real.cpo-2.4.sentence-1' class='sentence'>Otherwise, <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>real<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is ill-formed<a class='hidden_link' href='#qty.real.cpo-2.4.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div id='qty.imag.cpo' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.5.3.3</a> <span class='texttt'>mp_<span class='shy'></span>units&#x200b;::&#x200b;imag</span> <a class='abbr_ref' href='qty.imag.cpo.html'>[qty.imag.cpo]</a></h4><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.imag.cpo.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3826'>#</a></div><div class='texpara'><div id='qty.imag.cpo-1.sentence-1' class='sentence'>The name <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>imag</span> denotes a customization point object (<a href="https://wg21.link/customization.point.object">N4971, [customization.point.object]</a>)<a class='hidden_link' href='#qty.imag.cpo-1.sentence-1'>.</a></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.imag.cpo.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3829'>#</a></div><div class='texpara'><div id='qty.imag.cpo-2.sentence-1' class='sentence'>Given a subexpression <span class='texttt'>E</span> with type <span class='texttt'>T</span>,
let <span class='texttt'>t</span> be an lvalue that denotes the reified object for <span class='texttt'>E</span><a class='hidden_link' href='#qty.imag.cpo-2.sentence-1'>.</a></div> <div id='qty.imag.cpo-2.sentence-2' class='sentence'>Then:
<ul class='itemize'><li id='qty.imag.cpo-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.imag.cpo-2.1'>(2.1)</a></div><div class='texpara'><div id='qty.imag.cpo-2.1.sentence-1' class='sentence'>If <span class='texttt'>T</span> does not model <a href='#concept:WeaklyRegular' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:WeaklyRegular_'><span class='texttt'><i >WeaklyRegular</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>imag<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is ill-formed<a class='hidden_link' href='#qty.imag.cpo-2.1.sentence-1'>.</a></div></div></li><li id='qty.imag.cpo-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.imag.cpo-2.2'>(2.2)</a></div><div class='texpara'><div id='qty.imag.cpo-2.2.sentence-1' class='sentence'>If <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>imag<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar__'><span class='texttt'><i >Scalar</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>imag<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>imag<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.imag.cpo-2.2.sentence-1'>.</a></div></div></li><li id='qty.imag.cpo-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.imag.cpo-2.3'>(2.3)</a></div><div class='texpara'><div id='qty.imag.cpo-2.3.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>T</span> is a class or enumeration type and
<span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>imag<span class='parenthesis'>(</span>t<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar___'><span class='texttt'><i >Scalar</i></span></span></a>
where the meaning of <span class='texttt'>imag</span> is established as-if by performing argument-dependent lookup only (<a href="https://wg21.link/basic.lookup.argdep">N4971, [basic.lookup.argdep]</a>),
then <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>imag<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to that expression<a class='hidden_link' href='#qty.imag.cpo-2.3.sentence-1'>.</a></div></div></li><li id='qty.imag.cpo-2.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.imag.cpo-2.4'>(2.4)</a></div><div class='texpara'><div id='qty.imag.cpo-2.4.sentence-1' class='sentence'>Otherwise, <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>imag<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is ill-formed<a class='hidden_link' href='#qty.imag.cpo-2.4.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div id='qty.modulus.cpo' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.5.3.4</a> <span class='texttt'>mp_<span class='shy'></span>units&#x200b;::&#x200b;modulus</span> <a class='abbr_ref' href='qty.modulus.cpo.html'>[qty.modulus.cpo]</a></h4><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.modulus.cpo.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3851'>#</a></div><div class='texpara'><div id='qty.modulus.cpo-1.sentence-1' class='sentence'>The name <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>modulus</span> denotes a customization point object (<a href="https://wg21.link/customization.point.object">N4971, [customization.point.object]</a>)<a class='hidden_link' href='#qty.modulus.cpo-1.sentence-1'>.</a></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.modulus.cpo.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3854'>#</a></div><div class='texpara'><div id='qty.modulus.cpo-2.sentence-1' class='sentence'>Given a subexpression <span class='texttt'>E</span> with type <span class='texttt'>T</span>,
let <span class='texttt'>t</span> be an lvalue that denotes the reified object for <span class='texttt'>E</span><a class='hidden_link' href='#qty.modulus.cpo-2.sentence-1'>.</a></div> <div id='qty.modulus.cpo-2.sentence-2' class='sentence'>Then:
<ul class='itemize'><li id='qty.modulus.cpo-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.modulus.cpo-2.1'>(2.1)</a></div><div class='texpara'><div id='qty.modulus.cpo-2.1.sentence-1' class='sentence'>If <span class='texttt'>T</span> does not model <a href='#concept:WeaklyRegular' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:WeaklyRegular__'><span class='texttt'><i >WeaklyRegular</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>modulus<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is ill-formed<a class='hidden_link' href='#qty.modulus.cpo-2.1.sentence-1'>.</a></div></div></li><li id='qty.modulus.cpo-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.modulus.cpo-2.2'>(2.2)</a></div><div class='texpara'><div id='qty.modulus.cpo-2.2.sentence-1' class='sentence'>If <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>modulus<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar____'><span class='texttt'><i >Scalar</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>modulus<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>modulus<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.modulus.cpo-2.2.sentence-1'>.</a></div></div></li><li id='qty.modulus.cpo-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.modulus.cpo-2.3'>(2.3)</a></div><div class='texpara'><div id='qty.modulus.cpo-2.3.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>T</span> is a class or enumeration type and
<span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>modulus<span class='parenthesis'>(</span>t<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar_____'><span class='texttt'><i >Scalar</i></span></span></a>
where the meaning of <span class='texttt'>modulus</span> is established as-if by performing argument-dependent lookup only (<a href="https://wg21.link/basic.lookup.argdep">N4971, [basic.lookup.argdep]</a>),
then <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>modulus<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to that expression<a class='hidden_link' href='#qty.modulus.cpo-2.3.sentence-1'>.</a></div></div></li><li id='qty.modulus.cpo-2.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.modulus.cpo-2.4'>(2.4)</a></div><div class='texpara'><div id='qty.modulus.cpo-2.4.sentence-1' class='sentence'>If <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>abs<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar______'><span class='texttt'><i >Scalar</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>modulus<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>abs<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.modulus.cpo-2.4.sentence-1'>.</a></div></div></li><li id='qty.modulus.cpo-2.5'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.modulus.cpo-2.5'>(2.5)</a></div><div class='texpara'><div id='qty.modulus.cpo-2.5.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>T</span> is a class or enumeration type and
<span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>abs<span class='parenthesis'>(</span>t<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar_______'><span class='texttt'><i >Scalar</i></span></span></a>
where the meaning of <span class='texttt'>abs</span> is established as-if by performing argument-dependent lookup only (<a href="https://wg21.link/basic.lookup.argdep">N4971, [basic.lookup.argdep]</a>),
then <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>modulus<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to that expression<a class='hidden_link' href='#qty.modulus.cpo-2.5.sentence-1'>.</a></div></div></li><li id='qty.modulus.cpo-2.6'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.modulus.cpo-2.6'>(2.6)</a></div><div class='texpara'><div id='qty.modulus.cpo-2.6.sentence-1' class='sentence'>Otherwise, <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>modulus<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is ill-formed<a class='hidden_link' href='#qty.modulus.cpo-2.6.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div id='qty.mag.cpo' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.5.3.5</a> <span class='texttt'>mp_<span class='shy'></span>units&#x200b;::&#x200b;magnitude</span> <a class='abbr_ref' href='qty.mag.cpo.html'>[qty.mag.cpo]</a></h4><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.mag.cpo.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3884'>#</a></div><div class='texpara'><div id='qty.mag.cpo-1.sentence-1' class='sentence'>The name <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>magnitude</span> denotes a customization point object (<a href="https://wg21.link/customization.point.object">N4971, [customization.point.object]</a>)<a class='hidden_link' href='#qty.mag.cpo-1.sentence-1'>.</a></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.mag.cpo.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3887'>#</a></div><div class='texpara'><div id='qty.mag.cpo-2.sentence-1' class='sentence'>Given a subexpression <span class='texttt'>E</span> with type <span class='texttt'>T</span>,
let <span class='texttt'>t</span> be an lvalue that denotes the reified object for <span class='texttt'>E</span><a class='hidden_link' href='#qty.mag.cpo-2.sentence-1'>.</a></div> <div id='qty.mag.cpo-2.sentence-2' class='sentence'>Then:
<ul class='itemize'><li id='qty.mag.cpo-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.mag.cpo-2.1'>(2.1)</a></div><div class='texpara'><div id='qty.mag.cpo-2.1.sentence-1' class='sentence'>If <span class='texttt'>T</span> does not model <a href='#concept:WeaklyRegular' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:WeaklyRegular___'><span class='texttt'><i >WeaklyRegular</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>magnitude<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is ill-formed<a class='hidden_link' href='#qty.mag.cpo-2.1.sentence-1'>.</a></div></div></li><li id='qty.mag.cpo-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.mag.cpo-2.2'>(2.2)</a></div><div class='texpara'><div id='qty.mag.cpo-2.2.sentence-1' class='sentence'>If <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>magnitude<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar________'><span class='texttt'><i >Scalar</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>magnitude<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>magnitude<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.mag.cpo-2.2.sentence-1'>.</a></div></div></li><li id='qty.mag.cpo-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.mag.cpo-2.3'>(2.3)</a></div><div class='texpara'><div id='qty.mag.cpo-2.3.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>T</span> is a class or enumeration type and
<span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>magnitude<span class='parenthesis'>(</span>t<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar_________'><span class='texttt'><i >Scalar</i></span></span></a>
where the meaning of <span class='texttt'>magnitude</span> is established as-if by performing argument-dependent lookup only (<a href="https://wg21.link/basic.lookup.argdep">N4971, [basic.lookup.argdep]</a>),
then <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>magnitude<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to that expression<a class='hidden_link' href='#qty.mag.cpo-2.3.sentence-1'>.</a></div></div></li><li id='qty.mag.cpo-2.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.mag.cpo-2.4'>(2.4)</a></div><div class='texpara'><div id='qty.mag.cpo-2.4.sentence-1' class='sentence'>Otherwise, if <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>abs<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar__________'><span class='texttt'><i >Scalar</i></span></span></a>,
<span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>magnitude<span class='parenthesis'>(</span>&#x200b;E<span class='parenthesis'>)</span></span> is expression-equivalent to <span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>t<span class='operator'>.</span>abs<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.mag.cpo-2.4.sentence-1'>.</a></div></div></li><li id='qty.mag.cpo-2.5'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.mag.cpo-2.5'>(2.5)</a></div><div class='texpara'><div id='qty.mag.cpo-2.5.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>T</span> is a class or enumeration type and
<span class='texttt'><span class='keyword'>auto</span><span class='parenthesis'>(</span>abs<span class='parenthesis'>(</span>t<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is a valid expression whose type models <a href='#concept:Scalar' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Scalar___________'><span class='texttt'><i >Scalar</i></span></span></a>
where the meaning of <span class='texttt'>magnitude</span> is established as-if by performing argument-dependent lookup only (<a href="https://wg21.link/basic.lookup.argdep">N4971, [basic.lookup.argdep]</a>),
then <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>magnitude<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is expression-equivalent to that expression<a class='hidden_link' href='#qty.mag.cpo-2.5.sentence-1'>.</a></div></div></li><li id='qty.mag.cpo-2.6'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.mag.cpo-2.6'>(2.6)</a></div><div class='texpara'><div id='qty.mag.cpo-2.6.sentence-1' class='sentence'>Otherwise, <span class='texttt'>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>magnitude<span class='parenthesis'>(</span>E<span class='parenthesis'>)</span></span> is ill-formed<a class='hidden_link' href='#qty.mag.cpo-2.6.sentence-1'>.</a></div></div></li></ul></div></div></div></div></div><div id='qty.rep.concepts' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.5.4</a> Concepts <a class='abbr_ref' href='qty.rep.concepts.html'>[qty.rep.concepts]</a></h3><div class='texpara'><div class='itemdecl' id='qty.rep.concepts-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#qty.rep.concepts-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >WeaklyRegular</i></span><a class='index' id='concept:WeaklyRegular'></a> <span class='operator'>=</span> std<span class='operator'>::</span>copyable<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> std<span class='operator'>::</span>equality_comparable<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >Scalar</i></span><a class='index' id='concept:Scalar'></a> <span class='operator'>=</span> <span class='parenthesis'>(</span><span class='operator'>!</span>disable_scalar<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:WeaklyRegular____'></a><span class='texttt'><i >WeaklyRegular</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='keyword'>requires</span><span class='parenthesis'>(</span>T a, T b<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='comment'>// <i >exposition only</i></span>
<span class='comment'>// scalar operations</span>
<span class='curlybracket'>{</span> <span class='operator'>-</span>a <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>+</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>-</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>*</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>/</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>;
</code></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.rep.concepts.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3932'>#</a></div><div class='texpara'><div id='qty.rep.concepts-1.sentence-1' class='sentence'>TBD<a class='hidden_link' href='#qty.rep.concepts-1.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='concept:Complex'><div class='marginalizedparent'><a class='itemDeclLink' href='#concept:Complex'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>using</span> <span class='texttt'><i >value-type-t</i></span> <span class='operator'>=</span> <span class='texttt'><i >actual-value-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>; <span class='comment'>// <i >exposition only</i>, see <a href='#qty.fp.traits' title='5.5.2.1&emsp;Floating-point'>[qty.<span class='shy'></span>fp.<span class='shy'></span>traits]</a></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >Complex</i></span><a class='index' id='concept:Complex'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<span class='parenthesis'>(</span><span class='operator'>!</span>disable_complex<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:WeaklyRegular_____'></a><span class='texttt'><i >WeaklyRegular</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:Scalar____________'></a><span class='texttt'><i >Scalar</i></span><span class='anglebracket'>&lt;</span><span class='texttt'><i >value-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span>T, <span class='texttt'><i >value-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, <span class='texttt'><i >value-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>T a, T b, <span class='texttt'><i >value-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> s<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='comment'>// complex operations</span>
<span class='curlybracket'>{</span> <span class='operator'>-</span>a <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>+</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>-</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>*</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>/</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>*</span> s <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> s <span class='operator'>*</span> a <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>/</span> s <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='operator'>::</span>mp_units<span class='operator'>::</span>real<span class='parenthesis'>(</span>a<span class='parenthesis'>)</span>;
<span class='operator'>::</span>mp_units<span class='operator'>::</span>imag<span class='parenthesis'>(</span>a<span class='parenthesis'>)</span>;
<span class='operator'>::</span>mp_units<span class='operator'>::</span>modulus<span class='parenthesis'>(</span>a<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>;
</code></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.rep.concepts.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3959'>#</a></div><div class='texpara'><div id='qty.rep.concepts-2.sentence-1' class='sentence'>TBD<a class='hidden_link' href='#qty.rep.concepts-2.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='concept:Vector'><div class='marginalizedparent'><a class='itemDeclLink' href='#concept:Vector'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >Vector</i></span><a class='index' id='concept:Vector'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<span class='parenthesis'>(</span><span class='operator'>!</span>disable_vector<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:WeaklyRegular______'></a><span class='texttt'><i >WeaklyRegular</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:Scalar_____________'></a><span class='texttt'><i >Scalar</i></span><span class='anglebracket'>&lt;</span><span class='texttt'><i >value-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>T a, T b, <span class='texttt'><i >value-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> s<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='comment'>// vector operations</span>
<span class='curlybracket'>{</span> <span class='operator'>-</span>a <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>+</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>-</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>*</span> s <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> s <span class='operator'>*</span> a <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>/</span> s <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='operator'>::</span>mp_units<span class='operator'>::</span>magnitude<span class='parenthesis'>(</span>a<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>;
</code></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.rep.concepts.html#3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3978'>#</a></div><div class='texpara'><div id='qty.rep.concepts-3.sentence-1' class='sentence'>TBD<a class='hidden_link' href='#qty.rep.concepts-3.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='concept:ScalarRepresentation'><div class='marginalizedparent'><a class='itemDeclLink' href='#concept:ScalarRepresentation'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>using</span> <span class='texttt'><i >scaling-factor-type-t</i></span> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
std<span class='operator'>::</span>conditional_t<span class='anglebracket'>&lt;</span>treat_as_floating_point<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>, <span class='keyword'>long</span> <span class='keyword'>double</span>, std<span class='operator'>::</span>intmax_t<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >ScalarRepresentation</i></span><a class='index' id='concept:ScalarRepresentation'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<span class='parenthesis'>(</span><span class='operator'>!</span><span class='texttt'><i >is-specialization-of</i></span><span class='anglebracket'>&lt;</span>T, quantity<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:Scalar______________'></a><span class='texttt'><i >Scalar</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>T a, T b, <span class='texttt'><i >scaling-factor-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> f<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='comment'>// scaling</span>
<span class='curlybracket'>{</span> a <span class='operator'>*</span> f <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> f <span class='operator'>*</span> a <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>/</span> f <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>;
</code></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.rep.concepts.html#4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L3997'>#</a></div><div class='texpara'><div id='qty.rep.concepts-4.sentence-1' class='sentence'>TBD<a class='hidden_link' href='#qty.rep.concepts-4.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='concept:ComplexRepresentation'><div class='marginalizedparent'><a class='itemDeclLink' href='#concept:ComplexRepresentation'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >ComplexRepresentation</i></span><a class='index' id='concept:ComplexRepresentation'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<span class='parenthesis'>(</span><span class='operator'>!</span><span class='texttt'><i >is-specialization-of</i></span><span class='anglebracket'>&lt;</span>T, quantity<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:Complex'></a><span class='texttt'><i >Complex</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>T a, T b, <span class='texttt'><i >scaling-factor-type-t</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> f<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='comment'>// scaling</span>
<span class='curlybracket'>{</span> a <span class='operator'>*</span> T<span class='parenthesis'>(</span>f<span class='parenthesis'>)</span> <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> T<span class='parenthesis'>(</span>f<span class='parenthesis'>)</span> <span class='operator'>*</span> a <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> a <span class='operator'>/</span> T<span class='parenthesis'>(</span>f<span class='parenthesis'>)</span> <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>;
</code></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.rep.concepts.html#5'>5</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4012'>#</a></div><div class='texpara'><div id='qty.rep.concepts-5.sentence-1' class='sentence'>TBD<a class='hidden_link' href='#qty.rep.concepts-5.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='concept:VectorRepresentation'><div class='marginalizedparent'><a class='itemDeclLink' href='#concept:VectorRepresentation'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >VectorRepresentation</i></span><a class='index' id='concept:VectorRepresentation'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<span class='parenthesis'>(</span><span class='operator'>!</span><span class='texttt'><i >is-specialization-of</i></span><span class='anglebracket'>&lt;</span>T, quantity<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:Vector'></a><span class='texttt'><i >Vector</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
</code></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.rep.concepts.html#6'>6</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4021'>#</a></div><div class='texpara'><div id='qty.rep.concepts-6.sentence-1' class='sentence'>TBD<a class='hidden_link' href='#qty.rep.concepts-6.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='concept:Representation'><div class='marginalizedparent'><a class='itemDeclLink' href='#concept:Representation'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='concept:Representation'><span id='lib:Representation'><span class='texttt'>Representation</span></span></span></a> <span class='operator'>=</span> <a class='index' id='conceptref:ScalarRepresentation'></a><span class='texttt'><i >ScalarRepresentation</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span> <a class='index' id='conceptref:ComplexRepresentation'></a><span class='texttt'><i >ComplexRepresentation</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span>
<a class='index' id='conceptref:VectorRepresentation'></a><span class='texttt'><i >VectorRepresentation</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
</code></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.rep.concepts.html#7'>7</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4030'>#</a></div><div class='texpara'><div id='qty.rep.concepts-7.sentence-1' class='sentence'>A type <span class='texttt'>T</span> models <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation________'><span class='texttt'>Representation</span></span></a> if
it represents the numerical value of a quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-29">IEC 60050, 112-01-29</a>)<a class='hidden_link' href='#qty.rep.concepts-7.sentence-1'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='qty.rep.concepts-itemdecl:8'><div class='marginalizedparent'><a class='itemDeclLink' href='#qty.rep.concepts-itemdecl:8'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, quantity_character Ch<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >IsOfCharacter</i></span><a class='index' id='concept:IsOfCharacter'></a> <span class='operator'>=</span> <span class='parenthesis'>(</span>Ch <span class='operator'>=</span><span class='operator'>=</span> quantity_character<span class='operator'>::</span>real_scalar <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:Scalar_______________'></a><span class='texttt'><i >Scalar</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span> <span class='comment'>// <i >exposition only</i></span>
<span class='parenthesis'>(</span>Ch <span class='operator'>=</span><span class='operator'>=</span> quantity_character<span class='operator'>::</span>complex_scalar <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:Complex_'></a><span class='texttt'><i >Complex</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
<span class='parenthesis'>(</span>Ch <span class='operator'>=</span><span class='operator'>=</span> quantity_character<span class='operator'>::</span>vector <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:Vector_'></a><span class='texttt'><i >Vector</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> V<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='concept:RepresentationOf'><span id='lib:RepresentationOf'><span class='texttt'>RepresentationOf</span></span></span></a> <span class='operator'>=</span>
<a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation_________'><span class='texttt'>Representation</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span><span class='parenthesis'>(</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_________________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>V<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span><a class='index' id='conceptref:QuantityKindSpec____________________'></a><span class='texttt'><i >QuantityKindSpec</i></span><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>V<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span> <a class='index' id='conceptref:IsOfCharacter'></a><span class='texttt'><i >IsOfCharacter</i></span><span class='anglebracket'>&lt;</span>T, V<span class='operator'>.</span>character<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
<span class='parenthesis'>(</span>std<span class='operator'>::</span>same_as<span class='anglebracket'>&lt;</span>quantity_character, <span class='keyword'>decltype</span><span class='parenthesis'>(</span>V<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:IsOfCharacter_'></a><span class='texttt'><i >IsOfCharacter</i></span><span class='anglebracket'>&lt;</span>T, V<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.rep.concepts.html#8'>8</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4047'>#</a></div><div class='texpara'><div id='qty.rep.concepts-8.sentence-1' class='sentence'>A type <span class='texttt'>T</span> models <span class='texttt'><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf__________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>V<span class='anglebracket'>&gt;</span></span> if
<span class='texttt'>T</span> models <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation__________'><span class='texttt'>Representation</span></span></a> and
<ul class='itemize'><li id='qty.rep.concepts-8.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.rep.concepts-8.1'>(8.1)</a></div><span class='texttt'>V</span> is a kind of quantity, or</li><li id='qty.rep.concepts-8.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.rep.concepts-8.2'>(8.2)</a></div>if <span class='texttt'>V</span> is a quantity, then <span class='texttt'>T</span> represents a value of its character, or</li><li id='qty.rep.concepts-8.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.rep.concepts-8.3'>(8.3)</a></div>if <span class='texttt'>V</span> is a quantity character, then <span class='texttt'>T</span> represents a value of <span class='texttt'>V</span><a class='hidden_link' href='#qty.rep.concepts-8.sentence-1'>.</a></li></ul></div></div></div></div></div><div id='qty' class='section'><h2 ><a class='secnum' style='min-width:65pt'>5.6</a> Quantity <a class='abbr_ref' href='qty.html'>[qty]</a></h2><div id='qty.general' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.6.1</a> General <a class='abbr_ref' href='qty.general.html'>[qty.general]</a></h3><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.general.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4063'>#</a></div><div class='texpara'><div id='qty.general-1.sentence-1' class='sentence'>Subclause <a href='#qty' title='5.6&emsp;Quantity'>[qty]</a> describes the class template <span class='texttt'>quantity</span>
that represents the value of a quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-28">IEC 60050, 112-01-28</a>)
that is an element of a vector space (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-03-01,102-03-04">IEC 60050, 102-03-01,102-03-04</a>)<a class='hidden_link' href='#qty.general-1.sentence-1'>.</a></div></div></div></div><div id='qty.like' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.6.2</a> Interoperability <a class='abbr_ref' href='qty.like.html'>[qty.like]</a></h3><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.like.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4070'>#</a></div><div class='texpara'><div id='qty.like-1.sentence-1' class='sentence'>The interfaces specified in this subclause and subclause <a href='#qty.pt.like' title='5.7.3&emsp;Interoperability'>[qty.<span class='shy'></span>pt.<span class='shy'></span>like]</a>
are used by <span class='texttt'>quantity</span> and <span class='texttt'>quantity_<span class='shy'></span>point</span>
to specify conversions with other types representing quantities<a class='hidden_link' href='#qty.like-1.sentence-1'>.</a></div> <div id='qty.like-note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#qty.like-note-1'>1</a></i>:&ensp;<div id='qty.like-1.sentence-2' class='sentence'><a href='#qty.chrono' title='5.9&emsp;std&#x200b;::&#x200b;chrono interoperability'>[qty.<span class='shy'></span>chrono]</a> implements them for <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>chrono<span class='operator'>&#x200b;::&#x200b;</span>duration</span> and <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>chrono<span class='operator'>&#x200b;::&#x200b;</span>time_<span class='shy'></span>point</span><a class='hidden_link' href='#qty.like-1.sentence-2'>.</a></div> —&nbsp;<i>end note</i>]</div></div></div></div><div class='texpara'><div class='itemdecl' id='qty.like-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#qty.like-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, <span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span><span class='anglebracket'>&gt;</span> <span class='keyword'>typename</span> Traits<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >qty-like-impl</i></span><a class='index' id='concept:qty-like-impl'></a> <span class='operator'>=</span> <span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='keyword'>const</span> T<span class='operator'>&amp;</span> qty, <span class='keyword'>const</span> Traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>rep<span class='operator'>&amp;</span> num<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='comment'>// <i >exposition only</i></span>
<span class='curlybracket'>{</span> Traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>to_numerical_value<span class='parenthesis'>(</span>qty<span class='parenthesis'>)</span> <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>same_as<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>{</span> Traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>from_numerical_value<span class='parenthesis'>(</span>num<span class='parenthesis'>)</span> <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>same_as<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>;
<span class='keyword'>requires</span> std<span class='operator'>::</span>same_as<span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>Traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>explicit_import<span class='parenthesis'>)</span>, <span class='keyword'>const</span> <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>requires</span> std<span class='operator'>::</span>same_as<span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>Traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>explicit_export<span class='parenthesis'>)</span>, <span class='keyword'>const</span> <span class='keyword'>bool</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>typename</span> std<span class='operator'>::</span>bool_constant<span class='anglebracket'>&lt;</span>Traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>explicit_import<span class='anglebracket'>&gt;</span>;
<span class='keyword'>typename</span> std<span class='operator'>::</span>bool_constant<span class='anglebracket'>&lt;</span>Traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>explicit_export<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:QuantityLike' title='5.6.2&emsp;Interoperability&emsp;[qty.like]'><span id='concept:QuantityLike'><span id='lib:QuantityLike'><span class='texttt'>QuantityLike</span></span></span></a> <span class='operator'>=</span> <span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_____________________________'><span class='texttt'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:qty-like-impl'></a><span class='texttt'><i >qty-like-impl</i></span><span class='anglebracket'>&lt;</span>T, quantity_like_traits<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='keyword'>requires</span> <span class='curlybracket'>{</span>
<span class='keyword'>typename</span> quantity<span class='anglebracket'>&lt;</span>quantity_like_traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>reference, <span class='keyword'>typename</span> quantity_like_traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>;
</code></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.like.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4095'>#</a></div><div class='texpara'><div id='qty.like-2.sentence-1' class='sentence'>In the following descriptions, let
<ul class='itemize'><li id='qty.like-2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.like-2.1'>(2.1)</a></div><span class='texttt'>Traits</span> be <span class='texttt'>quantity_<span class='shy'></span>like_<span class='shy'></span>traits</span> or <span class='texttt'>quantity_<span class='shy'></span>point_<span class='shy'></span>like_<span class='shy'></span>traits</span>,</li><li id='qty.like-2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.like-2.2'>(2.2)</a></div><span class='texttt'>Q</span> be a type for which <span class='texttt'>Traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span></span> is specialized,</li><li id='qty.like-2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.like-2.3'>(2.3)</a></div><span class='texttt'>qty</span> be an lvalue of type <span class='texttt'><span class='keyword'>const</span> Q</span>, and</li><li id='qty.like-2.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.like-2.4'>(2.4)</a></div><span class='texttt'>num</span> be an lvalue of type <span class='texttt'><span class='keyword'>const</span> Traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>rep</span><a class='hidden_link' href='#qty.like-2.sentence-1'>.</a></li></ul></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.like.html#3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4108'>#</a></div><div class='texpara'><div id='qty.like-3.sentence-1' class='sentence'><span class='texttt'>Q</span> models <span class='texttt'><a class='index' id='conceptref:qty-like-impl_'></a><span class='texttt'><i >qty-like-impl</i></span><span class='anglebracket'>&lt;</span>Traits<span class='anglebracket'>&gt;</span></span> if and only if:
<ul class='itemize'><li id='qty.like-3.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.like-3.1'>(3.1)</a></div><div class='texpara'><div id='qty.like-3.1.sentence-1' class='sentence'><span class='texttt'>Traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>to_<span class='shy'></span>numerical_<span class='shy'></span>value<span class='parenthesis'>(</span>qty<span class='parenthesis'>)</span></span> returns the numerical value (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-29">IEC 60050, 112-01-29</a>) of <span class='texttt'>qty</span><a class='hidden_link' href='#qty.like-3.1.sentence-1'>.</a></div></div></li><li id='qty.like-3.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.like-3.2'>(3.2)</a></div><div class='texpara'><div id='qty.like-3.2.sentence-1' class='sentence'><span class='texttt'>Traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>from_<span class='shy'></span>numerical_<span class='shy'></span>value<span class='parenthesis'>(</span>num<span class='parenthesis'>)</span></span> returns a <span class='texttt'>Q</span> with numerical value <span class='texttt'>num</span><a class='hidden_link' href='#qty.like-3.2.sentence-1'>.</a></div></div></li><li id='qty.like-3.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.like-3.3'>(3.3)</a></div><div class='texpara'><div id='qty.like-3.3.sentence-1' class='sentence'>If <span class='texttt'>Traits</span> is <span class='texttt'>quantity_<span class='shy'></span>point_<span class='shy'></span>like_<span class='shy'></span>traits</span>,
both numerical values are offset from <span class='texttt'>Traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>point_<span class='shy'></span>origin</span><a class='hidden_link' href='#qty.like-3.3.sentence-1'>.</a></div></div></li></ul></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.like.html#4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4120'>#</a></div><div class='texpara'><div id='qty.like-4.sentence-1' class='sentence'>If the following expression is <span class='texttt'><span class='literal'>true</span></span>, the specified conversion will be explicit<a class='hidden_link' href='#qty.like-4.sentence-1'>.</a></div> <ul class='itemize'><li id='qty.like-4.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.like-4.1'>(4.1)</a></div><div class='texpara'><div id='qty.like-4.1.sentence-1' class='sentence'><span class='texttt'>Traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>explicit_<span class='shy'></span>import</span> for the conversion from <span class='texttt'>Q</span> to this library's type<a class='hidden_link' href='#qty.like-4.1.sentence-1'>.</a></div></div></li><li id='qty.like-4.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#qty.like-4.2'>(4.2)</a></div><div class='texpara'><div id='qty.like-4.2.sentence-1' class='sentence'><span class='texttt'>Traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>explicit_<span class='shy'></span>export</span> for the conversion from this library's type to <span class='texttt'>Q</span><a class='hidden_link' href='#qty.like-4.2.sentence-1'>.</a></div></div></li></ul></div></div></div><div id='qty.syn' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.6.3</a> Class template <span class='texttt'>quantity</span> <a class='abbr_ref' href='qty.syn.html'>[qty.syn]</a></h3><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='concept:Quantity'><span id='lib:Quantity'><span class='tcode_in_codeblock'>Quantity</span></span></span></a> <span class='operator'>=</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>T, quantity<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q, <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='concept:QuantityOf'><span id='lib:QuantityOf'><span class='tcode_in_codeblock'>QuantityOf</span></span></span></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity______________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:QuantitySpecOf' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpecOf_'><span class='tcode_in_codeblock'>QuantitySpecOf</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>Q<span class='operator'>::</span>quantity_spec<span class='parenthesis'>)</span><span class='parenthesis'>)</span>, QS<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> UFrom, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> UTo<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> <i >integral-conversion-factor</i><span class='parenthesis'>(</span>UFrom from, UTo to<span class='parenthesis'>)</span> <span class='comment'>// <i >exposition only</i></span>
<span class='curlybracket'>{</span>
<span class='keyword'>return</span> <i >is-integral</i><span class='parenthesis'>(</span><i >get-canonical-unit</i><span class='parenthesis'>(</span>from<span class='parenthesis'>)</span><span class='operator'>.</span>mag <span class='operator'>/</span> <i >get-canonical-unit</i><span class='parenthesis'>(</span>to<span class='parenthesis'>)</span><span class='operator'>.</span>mag<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <i >IsFloatingPoint</i><a class='index' id='concept:IsFloatingPoint'></a> <span class='operator'>=</span> treat_as_floating_point<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span>; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FromRep, <span class='keyword'>typename</span> ToRep, <span class='keyword'>auto</span> FromUnit <span class='operator'>=</span> one, <span class='keyword'>auto</span> ToUnit <span class='operator'>=</span> one<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <i >ValuePreservingTo</i><a class='index' id='concept:ValuePreservingTo'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation___________'><span class='tcode_in_codeblock'>Representation</span></span></a><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FromRep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation____________'><span class='tcode_in_codeblock'>Representation</span></span></a><span class='anglebracket'>&lt;</span>ToRep<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>FromUnit<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>ToUnit<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> std<span class='operator'>::</span>assignable_from<span class='anglebracket'>&lt;</span>ToRep<span class='operator'>&amp;</span>, FromRep<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span><i >IsFloatingPoint</i><span class='anglebracket'>&lt;</span>ToRep<span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a class='index' id='conceptref:IsFloatingPoint'></a><i >IsFloatingPoint</i><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FromRep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span><i >integral-conversion-factor</i><span class='parenthesis'>(</span>FromUnit, ToUnit<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> QFrom, <span class='keyword'>typename</span> QTo<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <i >QuantityConvertibleTo</i><a class='index' id='concept:QuantityConvertibleTo'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_______________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>QFrom<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>QTo<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:QuantitySpecConvertibleTo____'></a><i >QuantitySpecConvertibleTo</i><span class='anglebracket'>&lt;</span>QFrom<span class='operator'>::</span>quantity_spec, QTo<span class='operator'>::</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:UnitConvertibleTo_'></a><i >UnitConvertibleTo</i><span class='anglebracket'>&lt;</span>QFrom<span class='operator'>::</span>unit, QTo<span class='operator'>::</span>unit<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<i >ValuePreservingTo</i><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> QFrom<span class='operator'>::</span>rep, <span class='keyword'>typename</span> QTo<span class='operator'>::</span>rep, QFrom<span class='operator'>::</span>unit, QTo<span class='operator'>::</span>unit<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>QFrom q<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <i >sudo-cast</i><span class='anglebracket'>&lt;</span>QTo<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>; <span class='comment'>// see <a href='#qty.non.mem.conv' title='5.6.15&emsp;Non-member conversions'>[qty.<span class='shy'></span>non.<span class='shy'></span>mem.<span class='shy'></span>conv]</a></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>auto</span> QS, <span class='keyword'>typename</span> Func, <span class='keyword'>typename</span> T, <span class='keyword'>typename</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <i >InvokeResultOf</i><a class='index' id='concept:InvokeResultOf'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________________________________________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>QS<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> std<span class='operator'>::</span>regular_invocable<span class='anglebracket'>&lt;</span>Func, T, U<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf___________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>invoke_result_t<span class='anglebracket'>&lt;</span>Func, T, U<span class='anglebracket'>&gt;</span>, QS<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Func, <span class='keyword'>typename</span> Q1, <span class='keyword'>typename</span> Q2,
<span class='keyword'>auto</span> QS <span class='operator'>=</span> std<span class='operator'>::</span>invoke_result_t<span class='anglebracket'>&lt;</span>Func, <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>Q1<span class='operator'>::</span>quantity_spec<span class='parenthesis'>)</span><span class='parenthesis'>)</span>,
<span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>Q2<span class='operator'>::</span>quantity_spec<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <i >InvocableQuantities</i><a class='index' id='concept:InvocableQuantities'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________________________________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>QS<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>Q1<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity__________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>Q2<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf'></a><i >InvokeResultOf</i><span class='anglebracket'>&lt;</span>QS, Func, <span class='keyword'>typename</span> Q1<span class='operator'>::</span>rep, <span class='keyword'>typename</span> Q2<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>auto</span> R1, <span class='keyword'>auto</span> R2<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <i >HaveCommonReference</i><a class='index' id='concept:HaveCommonReference'></a> <span class='operator'>=</span> <span class='keyword'>requires</span> <span class='curlybracket'>{</span> get_common_reference<span class='parenthesis'>(</span>R1, R2<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Func, Quantity Q1, Quantity Q2<span class='anglebracket'>&gt;</span>
<span class='keyword'>using</span> <i >common-quantity-for</i> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
quantity<span class='anglebracket'>&lt;</span>get_common_reference<span class='parenthesis'>(</span>Q1<span class='operator'>::</span>reference, Q2<span class='operator'>::</span>reference<span class='parenthesis'>)</span>,
std<span class='operator'>::</span>invoke_result_t<span class='anglebracket'>&lt;</span>Func, <span class='keyword'>typename</span> Q1<span class='operator'>::</span>rep, <span class='keyword'>typename</span> Q2<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Func, <span class='keyword'>typename</span> Q1, <span class='keyword'>typename</span> Q2<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <i >CommonlyInvocableQuantities</i><a class='index' id='concept:CommonlyInvocableQuantities'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity___________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>Q1<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity____________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>Q2<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:HaveCommonReference'></a><i >HaveCommonReference</i><span class='anglebracket'>&lt;</span>Q1<span class='operator'>::</span>reference, Q2<span class='operator'>::</span>reference<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
std<span class='operator'>::</span>convertible_to<span class='anglebracket'>&lt;</span>Q1, <i >common-quantity-for</i><span class='anglebracket'>&lt;</span>Func, Q1, Q2<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
std<span class='operator'>::</span>convertible_to<span class='anglebracket'>&lt;</span>Q2, <i >common-quantity-for</i><span class='anglebracket'>&lt;</span>Func, Q1, Q2<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvocableQuantities'></a><i >InvocableQuantities</i><span class='anglebracket'>&lt;</span>Func, Q1, Q2,
get_common_quantity_spec<span class='parenthesis'>(</span>Q1<span class='operator'>::</span>quantity_spec, Q2<span class='operator'>::</span>quantity_spec<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>auto</span> R1, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep1, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <i >SameValueAs</i><a class='index' id='concept:SameValueAs'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<span class='parenthesis'>(</span>equivalent<span class='parenthesis'>(</span>get_unit<span class='parenthesis'>(</span>R1<span class='parenthesis'>)</span>, get_unit<span class='parenthesis'>(</span>R2<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> std<span class='operator'>::</span>convertible_to<span class='anglebracket'>&lt;</span>Rep1, Rep2<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>using</span> <i >quantity-like-type</i> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
quantity<span class='anglebracket'>&lt;</span>quantity_like_traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>reference, <span class='keyword'>typename</span> quantity_like_traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, <span class='keyword'>typename</span> U, <span class='keyword'>typename</span> TT <span class='operator'>=</span> std<span class='operator'>::</span>remove_reference_t<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <i >Mutable</i><a class='index' id='concept:Mutable'></a> <span class='operator'>=</span> <span class='parenthesis'>(</span><span class='operator'>!</span>std<span class='operator'>::</span>is_const_v<span class='anglebracket'>&lt;</span>TT<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>TT, U<span class='anglebracket'>&gt;</span>; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference___________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a> <span class='keyword'>auto</span> R, <a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf____________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> Rep <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>class</span> <span id='lib:quantity'><a class='hidden_link' href='#lib:quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'>quantity</a></span> <span class='curlybracket'>{</span>
<span class='keyword'>public</span><span class='operator'>:</span>
Rep <i >numerical-value</i>; <span class='comment'>// <i >exposition only</i></span>
<span class='comment'>// member types and values</span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference____________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a> <span class='keyword'>auto</span> reference <span class='operator'>=</span> R;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec____________________________________________________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> quantity_spec <span class='operator'>=</span> get_quantity_spec<span class='parenthesis'>(</span>reference<span class='parenthesis'>)</span>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension___________________________________________'><span class='tcode_in_codeblock'>Dimension</span></span></a> <span class='keyword'>auto</span> dimension <span class='operator'>=</span> quantity_spec<span class='operator'>.</span>dimension;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> unit <span class='operator'>=</span> get_unit<span class='parenthesis'>(</span>reference<span class='parenthesis'>)</span>;
<span class='keyword'>using</span> rep <span class='operator'>=</span> Rep;
<span class='comment'>// <a href='#qty.static' title='5.6.4&emsp;Static member functions'>[qty.<span class='shy'></span>static]</a>, static member functions</span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> quantity zero<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> quantity one<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> quantity min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> quantity max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// <a href='#qty.cons' title='5.6.5&emsp;Constructors and assignment'>[qty.<span class='shy'></span>cons]</a>, constructors and assignment</span>
quantity<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>;
quantity<span class='parenthesis'>(</span><span class='keyword'>const</span> quantity<span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>;
quantity<span class='parenthesis'>(</span>quantity<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>;
<span class='operator'>~</span>quantity<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdValue, <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_____________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a> R2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:SameValueAs'></a><i >SameValueAs</i><span class='anglebracket'>&lt;</span>R2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, R, std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdValue<span class='anglebracket'>&gt;</span>, Rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> quantity<span class='parenthesis'>(</span>FwdValue<span class='operator'>&amp;</span><span class='operator'>&amp;</span> v, R2<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdValue, <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference______________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a> R2, <span class='keyword'>typename</span> Value <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdValue<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a class='index' id='conceptref:SameValueAs_'></a><i >SameValueAs</i><span class='anglebracket'>&lt;</span>R2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, R, Value, Rep<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:QuantityConvertibleTo'></a><i >QuantityConvertibleTo</i><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&lt;</span>R2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Value<span class='anglebracket'>&gt;</span>, quantity<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> quantity<span class='parenthesis'>(</span>FwdValue<span class='operator'>&amp;</span><span class='operator'>&amp;</span> v, R2<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:ValuePreservingTo'></a><i >ValuePreservingTo</i><span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span> FwdValue<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> quantity<span class='parenthesis'>(</span>FwdValue<span class='operator'>&amp;</span><span class='operator'>&amp;</span> v<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:QuantityConvertibleTo_'></a><i >QuantityConvertibleTo</i><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>explicit</span><span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span> quantity<span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantityLike' title='5.6.2&emsp;Interoperability&emsp;[qty.like]'><span id='conceptref:QuantityLike'><span class='tcode_in_codeblock'>QuantityLike</span></span></a> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo__'></a><i >QuantityConvertibleTo</i><span class='anglebracket'>&lt;</span><i >quantity-like-type</i><span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span>, quantity<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>explicit</span><span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span> quantity<span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
quantity<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> quantity<span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>;
quantity<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>quantity<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:ValuePreservingTo_'></a><i >ValuePreservingTo</i><span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span> FwdValue<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> quantity<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>FwdValue<span class='operator'>&amp;</span><span class='operator'>&amp;</span> v<span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#qty.conv' title='5.6.6&emsp;Conversions'>[qty.<span class='shy'></span>conv]</a>, conversions</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:UnitCompatibleWith'></a><i >UnitCompatibleWith</i><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> ToU<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo___'></a><i >QuantityConvertibleTo</i><span class='anglebracket'>&lt;</span>quantity, quantity<span class='anglebracket'>&lt;</span><i >make-reference</i><span class='parenthesis'>(</span>quantity_spec, ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, Rep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> in<span class='parenthesis'>(</span>ToU<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf_____________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> ToRep<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo____'></a><i >QuantityConvertibleTo</i><span class='anglebracket'>&lt;</span>quantity, quantity<span class='anglebracket'>&lt;</span>reference, ToRep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf_'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> in<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf______________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> ToRep,
<a class='index' id='conceptref:UnitCompatibleWith_'></a><i >UnitCompatibleWith</i><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> ToU<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo_____'></a><i >QuantityConvertibleTo</i><span class='anglebracket'>&lt;</span>quantity,
quantity<span class='anglebracket'>&lt;</span><i >make-reference</i><span class='parenthesis'>(</span>quantity_spec, ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, ToRep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf__'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> in<span class='parenthesis'>(</span>ToU<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:UnitCompatibleWith__'></a><i >UnitCompatibleWith</i><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> ToU<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='keyword'>const</span> quantity q<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> value_cast<span class='anglebracket'>&lt;</span>ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf___'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> force_in<span class='parenthesis'>(</span>ToU<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf_______________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> ToRep<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='keyword'>const</span> quantity q<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> value_cast<span class='anglebracket'>&lt;</span>ToRep<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf____'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> force_in<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> ToRep,
<a class='index' id='conceptref:UnitCompatibleWith___'></a><i >UnitCompatibleWith</i><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> ToU<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='keyword'>const</span> quantity q<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> value_cast<span class='anglebracket'>&lt;</span>ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, ToRep<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf_____'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> force_in<span class='parenthesis'>(</span>ToU<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='comment'>// <a href='#qty.obs' title='5.6.7&emsp;Numerical value observers'>[qty.<span class='shy'></span>obs]</a>, numerical value observers</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>equivalent<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, unit<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> rep<span class='operator'>&amp;</span> numerical_value_ref_in<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span> <span class='operator'>&amp;</span> <span class='keyword'>noexcept</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>equivalent<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, unit<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> <span class='keyword'>const</span> rep<span class='operator'>&amp;</span> numerical_value_ref_in<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='operator'>&amp;</span> <span class='keyword'>noexcept</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>equivalent<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, unit<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>void</span> numerical_value_ref_in<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:UnitCompatibleWith____'></a><i >UnitCompatibleWith</i><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo______'></a><i >QuantityConvertibleTo</i><span class='anglebracket'>&lt;</span>quantity, quantity<span class='anglebracket'>&lt;</span><i >make-reference</i><span class='parenthesis'>(</span>quantity_spec, U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, Rep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> rep numerical_value_in<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:UnitCompatibleWith_____'></a><i >UnitCompatibleWith</i><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='keyword'>const</span> quantity q<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> value_cast<span class='anglebracket'>&lt;</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
<span class='keyword'>constexpr</span> rep force_numerical_value_in<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
<span class='comment'>// <a href='#qty.conv.ops' title='5.6.8&emsp;Conversion operations'>[qty.<span class='shy'></span>conv.<span class='shy'></span>ops]</a>, conversion operations</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> V_, std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span> Value <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>V_<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span>
<span class='keyword'>explicit</span> <span class='keyword'>operator</span> V_<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='operator'>&amp;</span> <span class='keyword'>noexcept</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q_, <a href='#concept:QuantityLike' title='5.6.2&emsp;Interoperability&emsp;[qty.like]'><span id='conceptref:QuantityLike_'><span class='tcode_in_codeblock'>QuantityLike</span></span></a> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>Q_<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo_______'></a><i >QuantityConvertibleTo</i><span class='anglebracket'>&lt;</span>quantity, <i >quantity-like-type</i><span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>explicit</span><span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span> <span class='keyword'>operator</span> Q_<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#qty.unary.ops' title='5.6.9&emsp;Unary operations'>[qty.<span class='shy'></span>unary.<span class='shy'></span>ops]</a>, unary operations</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf______'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf_______'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable'></a><i >Mutable</i><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='operator'>+</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable_'></a><i >Mutable</i><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='operator'>-</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='keyword'>int</span><span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf_________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='keyword'>int</span><span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// <a href='#qty.assign.ops' title='5.6.10&emsp;Compound assignment operations'>[qty.<span class='shy'></span>assign.<span class='shy'></span>ops]</a>, compound assignment operations</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable__'></a><i >Mutable</i><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='operator'>=</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable___'></a><i >Mutable</i><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='operator'>=</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable____'></a><i >Mutable</i><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>%</span><span class='operator'>=</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable_____'></a><i >Mutable</i><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a class='index' id='conceptref:ValuePreservingTo__'></a><i >ValuePreservingTo</i><span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='operator'>=</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable______'></a><i >Mutable</i><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a class='index' id='conceptref:ValuePreservingTo___'></a><i >ValuePreservingTo</i><span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='operator'>=</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable_______'></a><i >Mutable</i><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf__________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>dimensionless<span class='anglebracket'>&gt;</span> Q2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='operator'>=</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Q2<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable________'></a><i >Mutable</i><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf___________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>dimensionless<span class='anglebracket'>&gt;</span> Q2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='operator'>=</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Q2<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#qty.arith.ops' title='5.6.11&emsp;Arithmetic operations'>[qty.<span class='shy'></span>arith.<span class='shy'></span>ops]</a>, arithmetic operations</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:CommonlyInvocableQuantities'></a><i >CommonlyInvocableQuantities</i><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>plus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, quantity, quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_____________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:CommonlyInvocableQuantities_'></a><i >CommonlyInvocableQuantities</i><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>minus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, quantity, quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity______________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>treat_as_floating_point<span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span><span class='operator'>!</span>treat_as_floating_point<span class='anglebracket'>&lt;</span>Rep2<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:CommonlyInvocableQuantities__'></a><i >CommonlyInvocableQuantities</i><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>modulus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, quantity, quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_______________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>%</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation_____________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Q<span class='operator'>::</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf_'></a><i >InvokeResultOf</i><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>plus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation______________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Q<span class='operator'>::</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf__'></a><i >InvokeResultOf</i><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>minus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation_______________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Q<span class='operator'>::</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf___'></a><i >InvokeResultOf</i><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>modulus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity__________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>%</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation________________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Q<span class='operator'>::</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf____'></a><i >InvokeResultOf</i><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>plus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity___________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Value<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation_________________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Q<span class='operator'>::</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf_____'></a><i >InvokeResultOf</i><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>minus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity____________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Value<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation__________________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Q<span class='operator'>::</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf______'></a><i >InvokeResultOf</i><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>modulus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_____________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>%</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Value<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:InvocableQuantities_'></a><i >InvocableQuantities</i><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>multiplies<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, quantity, quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity______________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:InvocableQuantities__'></a><i >InvocableQuantities</i><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>divides<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, quantity, quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_______________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>typename</span> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_______________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a><span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf_______'></a><i >InvokeResultOf</i><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>multiplies<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf____________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>typename</span> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference________________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a><span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf________'></a><i >InvokeResultOf</i><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>divides<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf_____________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Value, std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity__________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_________________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a><span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf_________'></a><i >InvokeResultOf</i><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>multiplies<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span>, Rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf______________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Value<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Value, std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity___________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference__________________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a><span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf__________'></a><i >InvokeResultOf</i><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>divides<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span>, Rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity____________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Value<span class='operator'>&amp;</span>, <span class='keyword'>const</span> Q<span class='operator'>&amp;</span><span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#qty.cmp' title='5.6.12&emsp;Comparison'>[qty.<span class='shy'></span>cmp]</a>, comparison</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<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> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation___________________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation____________________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<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> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#qty.val.cmp' title='5.6.13&emsp;Value comparison'>[qty.<span class='shy'></span>val.<span class='shy'></span>cmp]</a>, value comparison</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> is_eq_zero<span class='parenthesis'>(</span><span class='keyword'>const</span> quantity<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span> <span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> is_neq_zero<span class='parenthesis'>(</span><span class='keyword'>const</span> quantity<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span> <span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> is_lt_zero<span class='parenthesis'>(</span><span class='keyword'>const</span> quantity<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span> <span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> is_gt_zero<span class='parenthesis'>(</span><span class='keyword'>const</span> quantity<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span> <span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> is_lteq_zero<span class='parenthesis'>(</span><span class='keyword'>const</span> quantity<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span> <span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> is_gteq_zero<span class='parenthesis'>(</span><span class='keyword'>const</span> quantity<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span> <span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation_____________________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value, <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference___________________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a> R<span class='anglebracket'>&gt;</span>
quantity<span class='parenthesis'>(</span>Value, R<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> quantity<span class='anglebracket'>&lt;</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Value<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation______________________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
quantity<span class='parenthesis'>(</span>Value<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> quantity<span class='anglebracket'>&lt;</span>one, Value<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantityLike' title='5.6.2&emsp;Interoperability&emsp;[qty.like]'><span id='conceptref:QuantityLike__'><span class='tcode_in_codeblock'>QuantityLike</span></span></a> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>explicit</span><span class='parenthesis'>(</span>quantity_like_traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>::</span>explicit_import<span class='parenthesis'>)</span> quantity<span class='parenthesis'>(</span>Q<span class='parenthesis'>)</span>
<span class='operator'>-</span><span class='anglebracket'>&gt;</span> quantity<span class='anglebracket'>&lt;</span>quantity_like_traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>::</span>reference, <span class='keyword'>typename</span> quantity_like_traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.syn.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4466'>#</a></div><div class='texpara'><div id='qty.syn-1.sentence-1' class='sentence'><span class='texttt'>quantity<span class='anglebracket'>&lt;</span>R, Rep<span class='anglebracket'>&gt;</span></span> is a structural type (<a href="https://wg21.link/temp.paramterm.structural.type">N4971, [temp.param]</a>)
if <span class='texttt'>Rep</span> is a structural type<a class='hidden_link' href='#qty.syn-1.sentence-1'>.</a></div></div></div></div><div id='qty.static' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.6.4</a> Static member functions <a class='abbr_ref' href='qty.static.html'>[qty.static]</a></h3><div class='texpara'><div id='lib:quantity,max'><div id='lib:max,quantity'><div id='lib:quantity,min'><div id='lib:min,quantity'><div id='lib:quantity,one'><div id='lib:one,quantity'><div id='lib:quantity,zero'><div id='lib:zero,quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:zero,quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>static</span> <span class='keyword'>constexpr</span> quantity zero<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> quantity one<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> quantity min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> quantity max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
</code></div></div></div></div></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.static.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4488'>#</a></div><div class='texpara'><div id='qty.static-1.sentence-1' class='sentence'>Let <i >F</i> be one of <span class='texttt'>zero</span>, <span class='texttt'>one</span>, <span class='texttt'>min</span>, and <span class='texttt'>max</span><a class='hidden_link' href='#qty.static-1.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.static.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4491'>#</a></div><div class='texpara'><div id='qty.static-2.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='curlybracket'>{</span>representation_<span class='shy'></span>values<span class='anglebracket'>&lt;</span>rep<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span><i >F</i><span class='parenthesis'>(</span><span class='parenthesis'>)</span>, R<span class='curlybracket'>}</span></span><a class='hidden_link' href='#qty.static-2.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.static.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4495'>#</a></div><div class='texpara'><div id='qty.static-3.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='keyword'>requires</span> <span class='curlybracket'>{</span> representation_values<span class='anglebracket'>&lt;</span>rep<span class='anglebracket'>&gt;</span><span class='operator'>::</span><i >F</i><span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
</span></div></div></div></div></div><div id='qty.cons' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.6.5</a> Constructors and assignment <a class='abbr_ref' href='qty.cons.html'>[qty.cons]</a></h3><div class='texpara'><div id='lib:quantity,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity,constructor'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdValue, <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference____________________________________________'><span class='texttt'>Reference</span></span></a> R2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:SameValueAs__'></a><span class='texttt'><i >SameValueAs</i></span><span class='anglebracket'>&lt;</span>R2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, R, std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdValue<span class='anglebracket'>&gt;</span>, Rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> quantity<span class='parenthesis'>(</span>FwdValue<span class='operator'>&amp;</span><span class='operator'>&amp;</span> v, R2<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:ValuePreservingTo____'></a><span class='texttt'><i >ValuePreservingTo</i></span><span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span> FwdValue<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> quantity<span class='parenthesis'>(</span>FwdValue<span class='operator'>&amp;</span><span class='operator'>&amp;</span> v<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.cons.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4517'>#</a></div><div class='texpara'><div id='qty.cons-1.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'><i >numerical-value</i></span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>FwdValue<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>v<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.cons-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:quantity,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity,constructor_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdValue, <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_____________________________________________'><span class='texttt'>Reference</span></span></a> R2, <span class='keyword'>typename</span> Value <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdValue<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a class='index' id='conceptref:SameValueAs___'></a><span class='texttt'><i >SameValueAs</i></span><span class='anglebracket'>&lt;</span>R2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, R, Value, Rep<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:QuantityConvertibleTo________'></a><span class='texttt'><i >QuantityConvertibleTo</i></span><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&lt;</span>R2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Value<span class='anglebracket'>&gt;</span>, quantity<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> quantity<span class='parenthesis'>(</span>FwdValue<span class='operator'>&amp;</span><span class='operator'>&amp;</span> v, R2<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.cons.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4531'>#</a></div><div class='texpara'><div id='qty.cons-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to
<span class='texttt'>quantity<span class='parenthesis'>(</span>quantity<span class='anglebracket'>&lt;</span>R2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Value<span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>FwdValue<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>v<span class='parenthesis'>)</span>, R2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.cons-2.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:quantity,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity,constructor__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:QuantityConvertibleTo_________'></a><span class='texttt'><i >QuantityConvertibleTo</i></span><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>explicit</span><span class='parenthesis'>(</span><span class='operator'>!</span>std<span class='operator'>::</span>convertible_to<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q<span class='operator'>::</span>rep, Rep<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> quantity<span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.cons.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4544'>#</a></div><div class='texpara'><div id='qty.cons-3.sentence-1' class='sentence'><i >Effects</i>: Equivalent to <span class='texttt'><span class='texttt'><i >sudo-cast</i></span><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span></span> (<a href='#qty.non.mem.conv' title='5.6.15&emsp;Non-member conversions'>[qty.<span class='shy'></span>non.<span class='shy'></span>mem.<span class='shy'></span>conv]</a>)<a class='hidden_link' href='#qty.cons-3.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:quantity,constructor___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity,constructor___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantityLike' title='5.6.2&emsp;Interoperability&emsp;[qty.like]'><span id='conceptref:QuantityLike___'><span class='texttt'>QuantityLike</span></span></a> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo__________'></a><span class='texttt'><i >QuantityConvertibleTo</i></span><span class='anglebracket'>&lt;</span><span class='texttt'><i >quantity-like-type</i></span><span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span>, quantity<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>explicit</span><span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span> quantity<span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.cons.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4557'>#</a></div><div class='texpara'><div id='qty.cons-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'>quantity<span class='parenthesis'>(</span><span class='operator'>::</span>mp_units<span class='operator'>::</span>quantity<span class='curlybracket'>{</span>quantity_like_traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>::</span>to_numerical_value<span class='parenthesis'>(</span>q<span class='parenthesis'>)</span>,
quantity_like_traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>::</span>reference<span class='curlybracket'>}</span><span class='parenthesis'>)</span>
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.cons.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4565'>#</a></div><div class='texpara'><div id='qty.cons-5.sentence-1' class='sentence'><i >Remarks</i>: The expression inside <span class='texttt'><span class='keyword'>explicit</span></span> is equivalent to:
<span class='codeblock'>quantity_like_traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>::</span>explicit_import <span class='operator'>|</span><span class='operator'>|</span>
<span class='operator'>!</span>std<span class='operator'>::</span>convertible_to<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> quantity_like_traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>::</span>rep, Rep<span class='anglebracket'>&gt;</span>
</span></div></div></div></div><div class='texpara'><div id='lib:quantity,operator='><div id='lib:operator=,quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator=,quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:ValuePreservingTo_____'></a><span class='texttt'><i >ValuePreservingTo</i></span><span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span> FwdValue<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> quantity<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>FwdValue<span class='operator'>&amp;</span><span class='operator'>&amp;</span> v<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.cons.html#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4582'>#</a></div><div class='texpara'><div id='qty.cons-6.sentence-1' class='sentence'><i >Effects</i>: Equivalent to <span class='texttt'><span class='texttt'><i >numerical-value</i></span> <span class='operator'>=</span> std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>FwdValue<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>v<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.cons-6.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.cons.html#7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4586'>#</a></div><div class='texpara'><div id='qty.cons-7.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='operator'>*</span><span class='keyword'>this</span></span><a class='hidden_link' href='#qty.cons-7.sentence-1'>.</a></div></div></div></div></div><div id='qty.conv' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.6.6</a> Conversions <a class='abbr_ref' href='qty.conv.html'>[qty.conv]</a></h3><div class='texpara'><div id='lib:quantity,in'><div id='lib:in,quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:in,quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:UnitCompatibleWith______'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> ToU<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo___________'></a><span class='texttt'><i >QuantityConvertibleTo</i></span><span class='anglebracket'>&lt;</span>quantity, quantity<span class='anglebracket'>&lt;</span><span class='texttt'><i >make-reference</i></span><span class='parenthesis'>(</span>quantity_spec, ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, Rep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf_______________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> in<span class='parenthesis'>(</span>ToU<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.conv.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4601'>#</a></div><div class='texpara'><div id='qty.conv-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> quantity<span class='anglebracket'>&lt;</span><span class='texttt'><i >make-reference</i></span><span class='parenthesis'>(</span>quantity_<span class='shy'></span>spec, ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, Rep<span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='operator'>*</span><span class='keyword'>this</span><span class='curlybracket'>}</span>;</span></div></div></div></div><div class='texpara'><div id='lib:quantity,in_'><div id='lib:in,quantity_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:in,quantity_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf_________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> ToRep<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo____________'></a><span class='texttt'><i >QuantityConvertibleTo</i></span><span class='anglebracket'>&lt;</span>quantity, quantity<span class='anglebracket'>&lt;</span>reference, ToRep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> in<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.conv.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4615'>#</a></div><div class='texpara'><div id='qty.conv-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> quantity<span class='anglebracket'>&lt;</span>reference, ToRep<span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='operator'>*</span><span class='keyword'>this</span><span class='curlybracket'>}</span>;</span></div></div></div></div><div class='texpara'><div id='lib:quantity,in__'><div id='lib:in,quantity__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:in,quantity__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf__________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> ToRep,
<a class='index' id='conceptref:UnitCompatibleWith_______'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> ToU<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo_____________'></a><span class='texttt'><i >QuantityConvertibleTo</i></span><span class='anglebracket'>&lt;</span>quantity,
quantity<span class='anglebracket'>&lt;</span><span class='texttt'><i >make-reference</i></span><span class='parenthesis'>(</span>quantity_spec, ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, ToRep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf_________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> in<span class='parenthesis'>(</span>ToU<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.conv.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4631'>#</a></div><div class='texpara'><div id='qty.conv-3.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> quantity<span class='anglebracket'>&lt;</span><i >make-reference</i><span class='parenthesis'>(</span>quantity_spec, ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, ToRep<span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span><span class='operator'>*</span><span class='keyword'>this</span><span class='curlybracket'>}</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:quantity,force_in'><div id='lib:force_in,quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:force_in,quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:UnitCompatibleWith________'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> ToU<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='keyword'>const</span> quantity q<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> value_cast<span class='anglebracket'>&lt;</span>ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf__________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> force_in<span class='parenthesis'>(</span>ToU<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.conv.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4647'>#</a></div><div class='texpara'><div id='qty.conv-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> value_<span class='shy'></span>cast<span class='anglebracket'>&lt;</span>ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='operator'>*</span><span class='keyword'>this</span><span class='parenthesis'>)</span>;</span></div></div></div></div><div class='texpara'><div id='lib:quantity,force_in_'><div id='lib:force_in,quantity_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:force_in,quantity_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf___________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> ToRep<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='keyword'>const</span> quantity q<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> value_cast<span class='anglebracket'>&lt;</span>ToRep<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf___________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> force_in<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.conv.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4661'>#</a></div><div class='texpara'><div id='qty.conv-5.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> value_<span class='shy'></span>cast<span class='anglebracket'>&lt;</span>ToRep<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='operator'>*</span><span class='keyword'>this</span><span class='parenthesis'>)</span>;</span></div></div></div></div><div class='texpara'><div id='lib:quantity,force_in__'><div id='lib:force_in,quantity__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:force_in,quantity__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf____________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> ToRep,
<a class='index' id='conceptref:UnitCompatibleWith_________'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> ToU<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='keyword'>const</span> quantity q<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> value_cast<span class='anglebracket'>&lt;</span>ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, ToRep<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf____________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> force_in<span class='parenthesis'>(</span>ToU<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.conv.html#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4676'>#</a></div><div class='texpara'><div id='qty.conv-6.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> value_<span class='shy'></span>cast<span class='anglebracket'>&lt;</span>ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, ToRep<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='operator'>*</span><span class='keyword'>this</span><span class='parenthesis'>)</span>;</span></div></div></div></div></div><div id='qty.obs' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.6.7</a> Numerical value observers <a class='abbr_ref' href='qty.obs.html'>[qty.obs]</a></h3><div class='texpara'><div id='lib:quantity,numerical_value_ref_in'><div id='lib:numerical_value_ref_in,quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:numerical_value_ref_in,quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>equivalent<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, unit<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> rep<span class='operator'>&amp;</span> numerical_value_ref_in<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span> <span class='operator'>&amp;</span> <span class='keyword'>noexcept</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>equivalent<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, unit<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> <span class='keyword'>const</span> rep<span class='operator'>&amp;</span> numerical_value_ref_in<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='operator'>&amp;</span> <span class='keyword'>noexcept</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.obs.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4695'>#</a></div><div class='texpara'><div id='qty.obs-1.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><i >numerical-value</i></span><a class='hidden_link' href='#qty.obs-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:quantity,numerical_value_in'><div id='lib:numerical_value_in,quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:numerical_value_in,quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:UnitCompatibleWith__________'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo______________'></a><span class='texttt'><i >QuantityConvertibleTo</i></span><span class='anglebracket'>&lt;</span>quantity, quantity<span class='anglebracket'>&lt;</span><span class='texttt'><i >make-reference</i></span><span class='parenthesis'>(</span>quantity_spec, U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, Rep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> rep numerical_value_in<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.obs.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4708'>#</a></div><div class='texpara'><div id='qty.obs-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> <span class='parenthesis'>(</span><span class='operator'>*</span><span class='keyword'>this</span><span class='parenthesis'>)</span><span class='operator'>.</span>in<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='operator'>.</span><span class='texttt'><i >numerical-value</i></span>;</span></div></div></div></div><div class='texpara'><div id='lib:quantity,force_numerical_value_in'><div id='lib:force_numerical_value_in,quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:force_numerical_value_in,quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:UnitCompatibleWith___________'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='keyword'>const</span> quantity q<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> value_cast<span class='anglebracket'>&lt;</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
<span class='keyword'>constexpr</span> rep force_numerical_value_in<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.obs.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4722'>#</a></div><div class='texpara'><div id='qty.obs-3.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> <span class='parenthesis'>(</span><span class='operator'>*</span><span class='keyword'>this</span><span class='parenthesis'>)</span><span class='operator'>.</span>force_<span class='shy'></span>in<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='operator'>.</span><span class='texttt'><i >numerical-value</i></span>;</span></div></div></div></div></div><div id='qty.conv.ops' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.6.8</a> Conversion operations <a class='abbr_ref' href='qty.conv.ops.html'>[qty.conv.ops]</a></h3><div class='texpara'><div id='lib:quantity,operator_constructible_from<Rep>'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity,operator_constructible_from%3cRep%3e'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> V_, std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span> Value <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>V_<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span>
<span class='keyword'>explicit</span> <span class='keyword'>operator</span> V_<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='operator'>&amp;</span> <span class='keyword'>noexcept</span>;
</code></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.conv.ops.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4738'>#</a></div><div class='texpara'><div id='qty.conv.ops-1.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><i >numerical-value</i></span><a class='hidden_link' href='#qty.conv.ops-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:quantity,operator_QuantityLike'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity,operator_QuantityLike'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q_, <a href='#concept:QuantityLike' title='5.6.2&emsp;Interoperability&emsp;[qty.like]'><span id='conceptref:QuantityLike____'><span class='texttt'>QuantityLike</span></span></a> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>Q_<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo_______________'></a><span class='texttt'><i >QuantityConvertibleTo</i></span><span class='anglebracket'>&lt;</span>quantity, <span class='texttt'><i >quantity-like-type</i></span><span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>explicit</span><span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span> <span class='keyword'>operator</span> Q_<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.conv.ops.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4751'>#</a></div><div class='texpara'><div id='qty.conv.ops-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> quantity_like_traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>::</span>from_numerical_value<span class='parenthesis'>(</span>
numerical_value_in<span class='parenthesis'>(</span>get_unit<span class='parenthesis'>(</span>quantity_like_traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>::</span>reference<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.conv.ops.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4759'>#</a></div><div class='texpara'><div id='qty.conv.ops-3.sentence-1' class='sentence'><i >Remarks</i>: The expression inside <span class='texttt'><span class='keyword'>explicit</span></span> is equivalent to:
<span class='codeblock'>quantity_like_traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>::</span>explicit_export <span class='operator'>|</span><span class='operator'>|</span>
<span class='operator'>!</span>std<span class='operator'>::</span>convertible_to<span class='anglebracket'>&lt;</span>Rep, <span class='keyword'>typename</span> quantity_like_traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>
</span></div> <div id='qty.conv.ops-3.sentence-2' class='sentence'>
The exception specification is equivalent to:
<span class='codeblock'><span class='keyword'>noexcept</span><span class='parenthesis'>(</span>quantity_like_traits<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='operator'>::</span>from_numerical_value<span class='parenthesis'>(</span><i >numerical-value</i><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
std<span class='operator'>::</span>is_nothrow_copy_constructible_v<span class='anglebracket'>&lt;</span>rep<span class='anglebracket'>&gt;</span>
</span></div></div></div></div></div><div id='qty.unary.ops' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.6.9</a> Unary operations <a class='abbr_ref' href='qty.unary.ops.html'>[qty.unary.ops]</a></h3><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unary.ops.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4775'>#</a></div><div class='texpara'><div id='qty.unary.ops-1.sentence-1' class='sentence'>In the following descriptions,
let <span class='texttt'>@</span> be the <span class='textsf'><i >operator</i></span><a class='hidden_link' href='#qty.unary.ops-1.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:quantity,operator-'><div id='lib:operator-,quantity'><div id='lib:quantity,operator+'><div id='lib:operator+,quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator+,quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf_____________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf______________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unary.ops.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4789'>#</a></div><div class='texpara'><div id='qty.unary.ops-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> <span class='operator'>&#x200b;::&#x200b;</span>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>quantity<span class='curlybracket'>{</span>@<span class='texttt'><i >numerical-value</i></span>, reference<span class='curlybracket'>}</span>;</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unary.ops.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4794'>#</a></div><div class='texpara'><div id='qty.unary.ops-3.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='keyword'>const</span> rep v<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>{</span> @v <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>rep<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></div></div></div></div><div class='texpara'><div id='lib:quantity,operator--'><div id='lib:operator--,quantity'><div id='lib:quantity,operator++'><div id='lib:operator++,quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator++,quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable_________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='operator'>+</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable__________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='operator'>-</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unary.ops.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4816'>#</a></div><div class='texpara'><div id='qty.unary.ops-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to
<span class='texttt'>@q<span class='operator'>.</span><span class='texttt'><i >numerical-value</i></span></span><a class='hidden_link' href='#qty.unary.ops-4.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unary.ops.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4821'>#</a></div><div class='texpara'><div id='qty.unary.ops-5.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.unary.ops-5.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unary.ops.html#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4825'>#</a></div><div class='texpara'><div id='qty.unary.ops-6.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='keyword'>requires</span><span class='parenthesis'>(</span>rep<span class='operator'>&amp;</span> v<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>{</span> @v <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>same_as<span class='anglebracket'>&lt;</span>rep<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></div></div></div></div><div class='texpara'><div id='lib:quantity,operator--_'><div id='lib:operator--,quantity_'><div id='lib:quantity,operator++_'><div id='lib:operator++,quantity_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator++,quantity_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf_______________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='keyword'>int</span><span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='keyword'>int</span><span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unary.ops.html#7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4845'>#</a></div><div class='texpara'><div id='qty.unary.ops-7.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> <span class='operator'>&#x200b;::&#x200b;</span>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>quantity<span class='curlybracket'>{</span><span class='texttt'><i >numerical-value</i></span>@, reference<span class='curlybracket'>}</span>;</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.unary.ops.html#8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4850'>#</a></div><div class='texpara'><div id='qty.unary.ops-8.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='keyword'>requires</span><span class='parenthesis'>(</span>rep<span class='operator'>&amp;</span> v<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>{</span> v@ <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>common_with<span class='anglebracket'>&lt;</span>rep<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></div></div></div></div></div><div id='qty.assign.ops' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.6.10</a> Compound assignment operations <a class='abbr_ref' href='qty.assign.ops.html'>[qty.assign.ops]</a></h3><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.assign.ops.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4862'>#</a></div><div class='texpara'><div id='qty.assign.ops-1.sentence-1' class='sentence'>In the following descriptions,
let <span class='texttt'>@</span> be the <span class='textsf'><i >operator</i></span><a class='hidden_link' href='#qty.assign.ops-1.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:quantity,operator%='><div id='lib:operator%=,quantity'><div id='lib:quantity,operator-='><div id='lib:operator-=,quantity'><div id='lib:quantity,operator+='><div id='lib:operator+=,quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator+=,quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable___________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='operator'>=</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable____________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='operator'>=</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable_____________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>%</span><span class='operator'>=</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.assign.ops.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4882'>#</a></div><div class='texpara'><div id='qty.assign.ops-2.sentence-1' class='sentence'><i >Preconditions</i>: If <span class='texttt'>@</span> is <span class='texttt'><span class='operator'>%</span><span class='operator'>=</span></span>, then <span class='texttt'>is_<span class='shy'></span>neq_<span class='shy'></span>zero<span class='parenthesis'>(</span>rhs<span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#qty.assign.ops-2.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.assign.ops.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4886'>#</a></div><div class='texpara'><div id='qty.assign.ops-3.sentence-1' class='sentence'><i >Effects</i>: Equivalent to
<span class='texttt'>lhs<span class='operator'>.</span><span class='texttt'><i >numerical-value</i></span> @ rhs<span class='operator'>.</span>in<span class='parenthesis'>(</span>lhs<span class='operator'>.</span>unit<span class='parenthesis'>)</span><span class='operator'>.</span><span class='texttt'><i >numerical-value</i></span></span><a class='hidden_link' href='#qty.assign.ops-3.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.assign.ops.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4891'>#</a></div><div class='texpara'><div id='qty.assign.ops-4.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>lhs<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.assign.ops-4.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.assign.ops.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4895'>#</a></div><div class='texpara'><div id='qty.assign.ops-5.sentence-1' class='sentence'><i >Remarks</i>: Let <i >C</i> be
<ul class='itemize'><li id='qty.assign.ops-5.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.assign.ops-5.1'>(5.1)</a></div><span class='texttt'><span class='parenthesis'>(</span><span class='operator'>!</span>treat_<span class='shy'></span>as_<span class='shy'></span>floating_<span class='shy'></span>point<span class='anglebracket'>&lt;</span>rep<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span></span> if <span class='texttt'>@</span> is <span class='texttt'><span class='operator'>%</span><span class='operator'>=</span></span>, and</li><li id='qty.assign.ops-5.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.assign.ops-5.2'>(5.2)</a></div><span class='texttt'><span class='literal'>true</span></span> otherwise<a class='hidden_link' href='#qty.assign.ops-5.sentence-1'>.</a></li></ul></div> <div id='qty.assign.ops-5.sentence-2' class='sentence'>
The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><a class='index' id='conceptref:QuantityConvertibleTo________________'></a><i >QuantityConvertibleTo</i><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span>, quantity<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <i >C</i> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>rep<span class='operator'>&amp;</span> a, <span class='keyword'>const</span> Rep2 b<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>{</span> a @ b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>same_as<span class='anglebracket'>&lt;</span>rep<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.assign.ops.html#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4912'>#</a></div><div class='texpara'><div id='qty.assign.ops-6.sentence-1' class='sentence'><i >Recommended practice</i>: If <span class='texttt'>equivalent<span class='parenthesis'>(</span>unit, get_<span class='shy'></span>unit<span class='parenthesis'>(</span>rhs<span class='operator'>.</span>reference<span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span>,
then the expression <span class='texttt'>rhs<span class='operator'>.</span>in<span class='parenthesis'>(</span>lhs<span class='operator'>.</span>unit<span class='parenthesis'>)</span></span> is replaced with <span class='texttt'>rhs</span><a class='hidden_link' href='#qty.assign.ops-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:quantity,operator/='><div id='lib:operator/=,quantity'><div id='lib:quantity,operator*='><div id='lib:operator*=,quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*=,quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable______________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a class='index' id='conceptref:ValuePreservingTo______'></a><span class='texttt'><i >ValuePreservingTo</i></span><span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='operator'>=</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable_______________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a class='index' id='conceptref:ValuePreservingTo_______'></a><span class='texttt'><i >ValuePreservingTo</i></span><span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='operator'>=</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.assign.ops.html#7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4930'>#</a></div><div class='texpara'><div id='qty.assign.ops-7.sentence-1' class='sentence'><i >Preconditions</i>: If <span class='texttt'>@</span> is <span class='texttt'><span class='operator'>/</span><span class='operator'>=</span></span>, then <span class='texttt'>rhs <span class='operator'>!</span><span class='operator'>=</span> representation_<span class='shy'></span>values<span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>zero<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.assign.ops-7.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.assign.ops.html#8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4934'>#</a></div><div class='texpara'><div id='qty.assign.ops-8.sentence-1' class='sentence'><i >Effects</i>: Equivalent to
<span class='texttt'>lhs<span class='operator'>.</span><span class='texttt'><i >numerical-value</i></span> @ rhs</span><a class='hidden_link' href='#qty.assign.ops-8.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.assign.ops.html#9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4939'>#</a></div><div class='texpara'><div id='qty.assign.ops-9.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>lhs<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.assign.ops-9.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.assign.ops.html#10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4943'>#</a></div><div class='texpara'><div id='qty.assign.ops-10.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_____________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='keyword'>requires</span><span class='parenthesis'>(</span>rep<span class='operator'>&amp;</span> a, <span class='keyword'>const</span> Value b<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>{</span> a @ b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>same_as<span class='anglebracket'>&lt;</span>rep<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></div></div></div></div><div class='texpara'><div id='lib:quantity,operator/=_'><div id='lib:operator/=,quantity_'><div id='lib:quantity,operator*=_'><div id='lib:operator*=,quantity_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*=,quantity_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable________________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf_________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>dimensionless<span class='anglebracket'>&gt;</span> Q2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='operator'>=</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Q2<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable_________________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf__________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>dimensionless<span class='anglebracket'>&gt;</span> Q2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='operator'>=</span><span class='parenthesis'>(</span>Q<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Q2<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.assign.ops.html#11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4965'>#</a></div><div class='texpara'><div id='qty.assign.ops-11.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>Q<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>lhs<span class='parenthesis'>)</span> @ rhs<span class='operator'>.</span><span class='texttt'><i >numerical-value</i></span>;</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.assign.ops.html#12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4970'>#</a></div><div class='texpara'><div id='qty.assign.ops-12.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='parenthesis'>(</span>Q2<span class='operator'>::</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:ValuePreservingTo________'></a><i >ValuePreservingTo</i><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q2<span class='operator'>::</span>rep, Rep<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>rep<span class='operator'>&amp;</span> a, <span class='keyword'>const</span> Q2<span class='operator'>::</span>rep b<span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>{</span> a @ b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> std<span class='operator'>::</span>same_as<span class='anglebracket'>&lt;</span>rep<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></div></div></div></div></div><div id='qty.arith.ops' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.6.11</a> Arithmetic operations <a class='abbr_ref' href='qty.arith.ops.html'>[qty.arith.ops]</a></h3><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.arith.ops.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4983'>#</a></div><div class='texpara'><div id='qty.arith.ops-1.sentence-1' class='sentence'>In the following descriptions,
let <span class='texttt'>@</span> be the <span class='textsf'><i >operator</i></span><a class='hidden_link' href='#qty.arith.ops-1.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:quantity,operator%'><div id='lib:operator%,quantity'><div id='lib:quantity,operator-_'><div id='lib:operator-,quantity_'><div id='lib:quantity,operator+_'><div id='lib:operator+,quantity_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator+,quantity_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:CommonlyInvocableQuantities___'></a><span class='texttt'><i >CommonlyInvocableQuantities</i></span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>plus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, quantity, quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity______________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:CommonlyInvocableQuantities____'></a><span class='texttt'><i >CommonlyInvocableQuantities</i></span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>minus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, quantity, quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_______________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>treat_as_floating_point<span class='anglebracket'>&lt;</span>Rep<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span><span class='operator'>!</span>treat_as_floating_point<span class='anglebracket'>&lt;</span>Rep2<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:CommonlyInvocableQuantities_____'></a><span class='texttt'><i >CommonlyInvocableQuantities</i></span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>modulus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, quantity, quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>%</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.arith.ops.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5004'>#</a></div><div class='texpara'><div id='qty.arith.ops-2.sentence-1' class='sentence'>Let <i >F</i> be the first argument to <a class='index' id='conceptref:CommonlyInvocableQuantities______'></a><span class='texttt'><i >CommonlyInvocableQuantities</i></span><a class='hidden_link' href='#qty.arith.ops-2.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.arith.ops.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5007'>#</a></div><div class='texpara'><div id='qty.arith.ops-3.sentence-1' class='sentence'><i >Preconditions</i>: If <span class='texttt'>@</span> is <span class='texttt'><span class='operator'>%</span></span>, then <span class='texttt'>is_<span class='shy'></span>neq_<span class='shy'></span>zero<span class='parenthesis'>(</span>rhs<span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#qty.arith.ops-3.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.arith.ops.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5011'>#</a></div><div class='texpara'><div id='qty.arith.ops-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>using</span> ret <span class='operator'>=</span> <i >common-quantity-for</i><span class='anglebracket'>&lt;</span><i >F</i>, quantity, quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>const</span> ret ret_lhs<span class='parenthesis'>(</span>lhs<span class='parenthesis'>)</span>;
<span class='keyword'>const</span> ret ret_rhs<span class='parenthesis'>(</span>rhs<span class='parenthesis'>)</span>;
<span class='keyword'>return</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>quantity<span class='curlybracket'>{</span>
ret_lhs<span class='operator'>.</span>numerical_value_ref_in<span class='parenthesis'>(</span>ret<span class='operator'>::</span>unit<span class='parenthesis'>)</span> @ ret_rhs<span class='operator'>.</span>numerical_value_ref_in<span class='parenthesis'>(</span>ret<span class='operator'>::</span>unit<span class='parenthesis'>)</span>,
ret<span class='operator'>::</span>reference<span class='curlybracket'>}</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:quantity,operator%_'><div id='lib:operator%,quantity_'><div id='lib:quantity,operator-__'><div id='lib:operator-,quantity__'><div id='lib:quantity,operator+__'><div id='lib:operator+,quantity__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator+,quantity__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation_______________________'><span class='texttt'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Q<span class='operator'>::</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf___________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>plus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation________________________'><span class='texttt'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Q<span class='operator'>::</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf____________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>minus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity__________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation_________________________'><span class='texttt'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Q<span class='operator'>::</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf_____________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>modulus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity___________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>%</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.arith.ops.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5043'>#</a></div><div class='texpara'><div id='qty.arith.ops-5.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> lhs @ <span class='operator'>&#x200b;::&#x200b;</span>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>quantity<span class='curlybracket'>{</span>rhs<span class='curlybracket'>}</span>;</span></div></div></div></div><div class='texpara'><div id='lib:quantity,operator%__'><div id='lib:operator%,quantity__'><div id='lib:quantity,operator-___'><div id='lib:operator-,quantity___'><div id='lib:quantity,operator+___'><div id='lib:operator+,quantity___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator+,quantity___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation__________________________'><span class='texttt'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Q<span class='operator'>::</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf______________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>plus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity____________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Value<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation___________________________'><span class='texttt'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Q<span class='operator'>::</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf_______________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>minus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_____________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Value<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation____________________________'><span class='texttt'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Q<span class='operator'>::</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf________________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>modulus<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity______________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>%</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Value<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.arith.ops.html#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5068'>#</a></div><div class='texpara'><div id='qty.arith.ops-6.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> <span class='operator'>&#x200b;::&#x200b;</span>mp_<span class='shy'></span>units<span class='operator'>&#x200b;::&#x200b;</span>quantity<span class='curlybracket'>{</span>lhs<span class='curlybracket'>}</span> @ rhs;</span></div></div></div></div><div class='texpara'><div id='lib:quantity,operator/_'><div id='lib:operator/,quantity_'><div id='lib:quantity,operator*_'><div id='lib:operator*,quantity_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,quantity_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:InvocableQuantities___'></a><span class='texttt'><i >InvocableQuantities</i></span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>multiplies<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, quantity, quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_______________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:InvocableQuantities____'></a><span class='texttt'><i >InvocableQuantities</i></span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>divides<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, quantity, quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity________________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.arith.ops.html#7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5086'>#</a></div><div class='texpara'><div id='qty.arith.ops-7.sentence-1' class='sentence'><i >Preconditions</i>: If <span class='texttt'>@</span> is <span class='texttt'><span class='operator'>/</span></span>, then <span class='texttt'>is_<span class='shy'></span>neq_<span class='shy'></span>zero<span class='parenthesis'>(</span>rhs<span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#qty.arith.ops-7.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.arith.ops.html#8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5090'>#</a></div><div class='texpara'><div id='qty.arith.ops-8.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>quantity<span class='curlybracket'>{</span>
lhs<span class='operator'>.</span>numerical_value_ref_in<span class='parenthesis'>(</span>unit<span class='parenthesis'>)</span> @ rhs<span class='operator'>.</span>numerical_value_ref_in<span class='parenthesis'>(</span>rhs<span class='operator'>.</span>unit<span class='parenthesis'>)</span>, R @ R2<span class='curlybracket'>}</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:quantity,operator/__'><div id='lib:operator/,quantity__'><div id='lib:quantity,operator*__'><div id='lib:operator*,quantity__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,quantity__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>typename</span> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_________________________________________________________________'><span class='texttt'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference______________________________________________'><span class='texttt'>Reference</span></span></a><span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf_________________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>multiplies<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf___________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>typename</span> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity__________________________________________________________________'><span class='texttt'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_______________________________________________'><span class='texttt'>Reference</span></span></a><span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf__________________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>divides<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf____________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.arith.ops.html#9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5113'>#</a></div><div class='texpara'><div id='qty.arith.ops-9.sentence-1' class='sentence'><i >Preconditions</i>: If <span class='texttt'>@</span> is <span class='texttt'><span class='operator'>/</span></span>, then <span class='texttt'>rhs <span class='operator'>!</span><span class='operator'>=</span> representation_<span class='shy'></span>values<span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='operator'>&#x200b;::&#x200b;</span>zero<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.arith.ops-9.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.arith.ops.html#10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5117'>#</a></div><div class='texpara'><div id='qty.arith.ops-10.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>quantity<span class='curlybracket'>{</span>lhs<span class='operator'>.</span>numerical_value_ref_in<span class='parenthesis'>(</span>unit<span class='parenthesis'>)</span> @ rhs, R<span class='curlybracket'>}</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:quantity,operator/___'><div id='lib:operator/,quantity___'><div id='lib:quantity,operator*___'><div id='lib:operator*,quantity___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,quantity___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Value, std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity___________________________________________________________________'><span class='texttt'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference________________________________________________'><span class='texttt'>Reference</span></span></a><span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf___________________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>multiplies<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span>, Rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf_____________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Value<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Value, std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity____________________________________________________________________'><span class='texttt'>Quantity</span></span></a><span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_________________________________________________'><span class='texttt'>Reference</span></span></a><span class='anglebracket'>&lt;</span>Value<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:InvokeResultOf____________________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'>&lt;</span>quantity_spec, std<span class='operator'>::</span>divides<span class='anglebracket'>&lt;</span><span class='anglebracket'>&gt;</span>, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span>, Rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_____________________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Value<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.arith.ops.html#11'>11</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5139'>#</a></div><div class='texpara'><div id='qty.arith.ops-11.sentence-1' class='sentence'><i >Preconditions</i>: If <span class='texttt'>@</span> is <span class='texttt'><span class='operator'>/</span></span>, then <span class='texttt'>is_<span class='shy'></span>neq_<span class='shy'></span>zero<span class='parenthesis'>(</span>rhs<span class='parenthesis'>)</span></span> is <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#qty.arith.ops-11.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.arith.ops.html#12'>12</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5143'>#</a></div><div class='texpara'><div id='qty.arith.ops-12.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>quantity<span class='curlybracket'>{</span>lhs @ rhs<span class='operator'>.</span>numerical_value_ref_in<span class='parenthesis'>(</span>unit<span class='parenthesis'>)</span>, <span class='operator'>::</span>mp_units<span class='operator'>::</span>one @ R<span class='curlybracket'>}</span>;
</span></div></div></div></div></div><div id='qty.cmp' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.6.12</a> Comparison <a class='abbr_ref' href='qty.cmp.html'>[qty.cmp]</a></h3><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.cmp.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5153'>#</a></div><div class='texpara'><div id='qty.cmp-1.sentence-1' class='sentence'>In the following descriptions,
let <span class='texttt'>@</span> be the <span class='textsf'><i >operator</i></span><a class='hidden_link' href='#qty.cmp-1.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:quantity,operator<=>'><div id='lib:operator<=>,quantity'><div id='lib:quantity,operator=='><div id='lib:operator==,quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator==,quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<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> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.cmp.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5169'>#</a></div><div class='texpara'><div id='qty.cmp-2.sentence-1' class='sentence'>Let <i >C</i> be
<span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>equality_<span class='shy'></span>comparable</span> if <span class='texttt'>@</span> is <span class='texttt'><span class='operator'>=</span><span class='operator'>=</span></span>, and
<span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>three_<span class='shy'></span>way_<span class='shy'></span>comparable</span> if <span class='texttt'>@</span> is <span class='texttt'><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.cmp-2.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.cmp.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5174'>#</a></div><div class='texpara'><div id='qty.cmp-3.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>using</span> ct <span class='operator'>=</span> std<span class='operator'>::</span>common_type_t<span class='anglebracket'>&lt;</span>quantity, quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>const</span> ct ct_lhs<span class='parenthesis'>(</span>lhs<span class='parenthesis'>)</span>;
<span class='keyword'>const</span> ct ct_rhs<span class='parenthesis'>(</span>rhs<span class='parenthesis'>)</span>;
<span class='keyword'>return</span> ct_lhs<span class='operator'>.</span>numerical_value_ref_in<span class='parenthesis'>(</span>ct<span class='operator'>::</span>unit<span class='parenthesis'>)</span> @ ct_rhs<span class='operator'>.</span>numerical_value_ref_in<span class='parenthesis'>(</span>ct<span class='operator'>::</span>unit<span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.cmp.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5184'>#</a></div><div class='texpara'><div id='qty.cmp-4.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='keyword'>requires</span> <span class='curlybracket'>{</span>
<span class='keyword'>typename</span> std<span class='operator'>::</span>common_type_t<span class='anglebracket'>&lt;</span>quantity, quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <i >C</i><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> std<span class='operator'>::</span>common_type_t<span class='anglebracket'>&lt;</span>quantity, quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>
</span></div></div></div></div><div class='texpara'><div id='lib:quantity,operator<=>_'><div id='lib:operator<=>,quantity_'><div id='lib:quantity,operator==_'><div id='lib:operator==,quantity_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator==,quantity_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation_____________________________'><span class='texttt'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span> Q, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation______________________________'><span class='texttt'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<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> Q<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.cmp.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5206'>#</a></div><div class='texpara'><div id='qty.cmp-5.sentence-1' class='sentence'>Let <i >C</i> be
<span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>equality_<span class='shy'></span>comparable_<span class='shy'></span>with</span> if <span class='texttt'>@</span> is <span class='texttt'><span class='operator'>=</span><span class='operator'>=</span></span>, and
<span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>three_<span class='shy'></span>way_<span class='shy'></span>comparable_<span class='shy'></span>with</span> if <span class='texttt'>@</span> is <span class='texttt'><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.cmp-5.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.cmp.html#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5211'>#</a></div><div class='texpara'><div id='qty.cmp-6.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>lhs<span class='operator'>.</span>numerical_<span class='shy'></span>value_<span class='shy'></span>ref_<span class='shy'></span>in<span class='parenthesis'>(</span>unit<span class='parenthesis'>)</span> @ rhs</span><a class='hidden_link' href='#qty.cmp-6.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.cmp.html#7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5215'>#</a></div><div class='texpara'><div id='qty.cmp-7.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='parenthesis'>(</span>Q<span class='operator'>::</span>unit <span class='operator'>=</span><span class='operator'>=</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <i >C</i><span class='anglebracket'>&lt;</span>Rep, Value<span class='anglebracket'>&gt;</span>
</span></div></div></div></div></div><div id='qty.val.cmp' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.6.13</a> Value comparison <a class='abbr_ref' href='qty.val.cmp.html'>[qty.val.cmp]</a></h3><div class='texpara'><div id='lib:quantity,is_gteq_zero'><div id='lib:is_gteq_zero,quantity'><div id='lib:quantity,is_lteq_zero'><div id='lib:is_lteq_zero,quantity'><div id='lib:quantity,is_gt_zero'><div id='lib:is_gt_zero,quantity'><div id='lib:quantity,is_lt_zero'><div id='lib:is_lt_zero,quantity'><div id='lib:quantity,is_neq_zero'><div id='lib:is_neq_zero,quantity'><div id='lib:quantity,is_eq_zero'><div id='lib:is_eq_zero,quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:is_eq_zero,quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> is_eq_zero<span class='parenthesis'>(</span><span class='keyword'>const</span> quantity<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span> <span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> is_neq_zero<span class='parenthesis'>(</span><span class='keyword'>const</span> quantity<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span> <span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> is_lt_zero<span class='parenthesis'>(</span><span class='keyword'>const</span> quantity<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span> <span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> is_gt_zero<span class='parenthesis'>(</span><span class='keyword'>const</span> quantity<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span> <span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> is_lteq_zero<span class='parenthesis'>(</span><span class='keyword'>const</span> quantity<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span> <span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> is_gteq_zero<span class='parenthesis'>(</span><span class='keyword'>const</span> quantity<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span> <span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
</code></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.val.cmp.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5241'>#</a></div><div class='texpara'><div id='qty.val.cmp-1.sentence-1' class='sentence'>Let <span class='texttt'>is_<span class='shy'></span><i >F</i>_<span class='shy'></span>zero</span> be the function name<a class='hidden_link' href='#qty.val.cmp-1.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.val.cmp.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5244'>#</a></div><div class='texpara'><div id='qty.val.cmp-2.sentence-1' class='sentence'><i >Returns</i>: <ul class='itemize'><li id='qty.val.cmp-2.1'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.val.cmp-2.1'>(2.1)</a></div><div class='texpara'><div id='qty.val.cmp-2.1.sentence-1' class='sentence'>If <span class='texttt'><i >F</i></span> is <span class='texttt'>eq</span>, returns <span class='texttt'>q <span class='operator'>=</span><span class='operator'>=</span> zero<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.val.cmp-2.1.sentence-1'>.</a></div></div></li><li id='qty.val.cmp-2.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.val.cmp-2.2'>(2.2)</a></div><div class='texpara'><div id='qty.val.cmp-2.2.sentence-1' class='sentence'>Otherwise, if <span class='texttt'><i >F</i></span> is <span class='texttt'>neq</span>, returns <span class='texttt'>q <span class='operator'>!</span><span class='operator'>=</span> zero<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.val.cmp-2.2.sentence-1'>.</a></div></div></li><li id='qty.val.cmp-2.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#qty.val.cmp-2.3'>(2.3)</a></div><div class='texpara'><div id='qty.val.cmp-2.3.sentence-1' class='sentence'>Otherwise, returns <span class='texttt'>is_<span class='shy'></span><i >F</i><span class='parenthesis'>(</span>q <span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span> zero<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span></span> (<a href="https://wg21.link/compare.syn">N4971, [compare.syn]</a>)<a class='hidden_link' href='#qty.val.cmp-2.3.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.val.cmp.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5255'>#</a></div><div class='texpara'><div id='qty.val.cmp-3.sentence-1' class='sentence'><i >Remarks</i>: Let <i >C</i> be
<span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>equality_<span class='shy'></span>comparable_<span class='shy'></span>with</span> if <i >F</i> is <span class='texttt'>eq</span> or <span class='texttt'>neq</span>, and
<span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>three_<span class='shy'></span>way_<span class='shy'></span>comparable_<span class='shy'></span>with</span> otherwise<a class='hidden_link' href='#qty.val.cmp-3.sentence-1'>.</a></div> <div id='qty.val.cmp-3.sentence-2' class='sentence'>The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='keyword'>requires</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>{</span> T<span class='operator'>::</span>zero<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >C</i><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></div></div></div></div></div><div id='qty.delta' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.6.14</a> Construction helper <span class='texttt'>delta</span> <a class='abbr_ref' href='qty.delta.html'>[qty.delta]</a></h3><div class='texpara'><span id='lib:delta_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:delta_'>🔗</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><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference__________________________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a> R<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> delta_ <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdRep,
<a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf_____________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> Rep <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdRep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> quantity<span class='anglebracket'>&lt;</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rep<span class='anglebracket'>&gt;</span> <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>FwdRep<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='texpara'><div id='lib:delta_,operator()'><div id='lib:operator(),delta_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator(),delta_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdRep,
<a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf______________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> Rep <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdRep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> quantity<span class='anglebracket'>&lt;</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rep<span class='anglebracket'>&gt;</span> <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>FwdRep<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.delta.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5292'>#</a></div><div class='texpara'><div id='qty.delta-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> quantity<span class='curlybracket'>{</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>FwdRep<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>lhs<span class='parenthesis'>)</span>, R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='curlybracket'>}</span>;</span></div></div></div></div></div><div id='qty.non.mem.conv' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.6.15</a> Non-member conversions <a class='abbr_ref' href='qty.non.mem.conv.html'>[qty.non.mem.conv]</a></h3><div class='texpara'><div id='lib:sudo-cast,quantity'><div id='lib:quantity,sudo-cast'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity,sudo-cast'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity______________________________________________________________________'><span class='texttt'>Quantity</span></span></a> To, <span class='keyword'>typename</span> FwdFrom, <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_______________________________________________________________________'><span class='texttt'>Quantity</span></span></a> From <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdFrom<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> To <span class='texttt'><i >sudo-cast</i></span><span class='parenthesis'>(</span>FwdFrom<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.non.mem.conv.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5308'>#</a></div><div class='texpara'><div id='qty.non.mem.conv-1.sentence-1' class='sentence'><i >Returns</i>: TBD<a class='hidden_link' href='#qty.non.mem.conv-1.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.non.mem.conv.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5313'>#</a></div><div class='texpara'><div id='qty.non.mem.conv-2.sentence-1' class='sentence'><span class='texttt'>value_<span class='shy'></span>cast</span> is an explicit cast that allows truncation<a class='hidden_link' href='#qty.non.mem.conv-2.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:quantity,value_cast'><div id='lib:value_cast,quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:value_cast,quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <span class='keyword'>typename</span> FwdQ, <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>convertible<span class='parenthesis'>(</span>Q<span class='operator'>::</span>reference, ToU<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.non.mem.conv.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5324'>#</a></div><div class='texpara'><div id='qty.non.mem.conv-3.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> <i >sudo-cast</i><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&lt;</span><i >make-reference</i><span class='parenthesis'>(</span>Q<span class='operator'>::</span>quantity_spec, ToU<span class='parenthesis'>)</span>, <span class='keyword'>typename</span> Q<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>
std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:quantity,value_cast_'><div id='lib:value_cast,quantity_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:value_cast,quantity_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation_______________________________'><span class='texttt'>Representation</span></span></a> ToRep, <span class='keyword'>typename</span> FwdQ, <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity__________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf_______________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>ToRep, Q<span class='operator'>::</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span>ToRep, <span class='keyword'>typename</span> Q<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> quantity<span class='anglebracket'>&lt;</span>Q<span class='operator'>::</span>reference, ToRep<span class='anglebracket'>&gt;</span> value_cast<span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.non.mem.conv.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5342'>#</a></div><div class='texpara'><div id='qty.non.mem.conv-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> <i >sudo-cast</i><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&lt;</span>Q<span class='operator'>::</span>reference, ToRep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:quantity,value_cast__'><div id='lib:value_cast,quantity__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:value_cast,quantity__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation________________________________'><span class='texttt'>Representation</span></span></a> ToRep, <span class='keyword'>typename</span> FwdQ,
<a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity___________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity____________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation_________________________________'><span class='texttt'>Representation</span></span></a> ToRep, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <span class='keyword'>typename</span> FwdQ,
<a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_____________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity______________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.non.mem.conv.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5363'>#</a></div><div class='texpara'><div id='qty.non.mem.conv-5.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> <i >sudo-cast</i><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&lt;</span><i >make-reference</i><span class='parenthesis'>(</span>Q<span class='operator'>::</span>quantity_spec, ToU<span class='parenthesis'>)</span>, ToRep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>
std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.non.mem.conv.html#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5371'>#</a></div><div class='texpara'><div id='qty.non.mem.conv-6.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='parenthesis'>(</span>convertible<span class='parenthesis'>(</span>Q<span class='operator'>::</span>reference, ToU<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>ToRep, Q<span class='operator'>::</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span>ToRep, <span class='keyword'>typename</span> Q<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>
</span></div></div></div></div><div class='texpara'><div id='lib:quantity,value_cast___'><div id='lib:value_cast,quantity___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:value_cast,quantity___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_______________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> ToQ, <span class='keyword'>typename</span> FwdQ, <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity________________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>convertible<span class='parenthesis'>(</span>Q<span class='operator'>::</span>reference, ToQ<span class='operator'>::</span>unit<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span>ToQ<span class='operator'>::</span>quantity_spec <span class='operator'>=</span><span class='operator'>=</span> Q<span class='operator'>::</span>quantity_spec<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> ToQ<span class='operator'>::</span>rep, <span class='keyword'>typename</span> Q<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_________________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.non.mem.conv.html#7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5389'>#</a></div><div class='texpara'><div id='qty.non.mem.conv-7.sentence-1' class='sentence'><i >Effects</i>: Equivalent to: <span class='texttt'><span class='keyword'>return</span> <span class='texttt'><i >sudo-cast</i></span><span class='anglebracket'>&lt;</span>ToQ<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.non.mem.conv.html#8'>8</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5394'>#</a></div><div class='texpara'><div id='qty.non.mem.conv-8.sentence-1' class='sentence'><span class='texttt'>quantity_<span class='shy'></span>cast</span> is an explicit cast that allows converting to more specific quantities<a class='hidden_link' href='#qty.non.mem.conv-8.sentence-1'>.</a></div> <div id='qty.non.mem.conv-example-1' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#qty.non.mem.conv-example-1'>1</a></i>:&ensp;<span class='codeblock'><span class='keyword'>auto</span> length <span class='operator'>=</span> isq<span class='operator'>::</span>length<span class='parenthesis'>(</span><span class='literal'>42</span> <span class='operator'>*</span> m<span class='parenthesis'>)</span>;
<span class='keyword'>auto</span> distance <span class='operator'>=</span> quantity_cast<span class='anglebracket'>&lt;</span>isq<span class='operator'>::</span>distance<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>length<span class='parenthesis'>)</span>;
</span> —&nbsp;<i>end example</i>]</div></div></div></div><div class='texpara'><div id='lib:quantity,quantity_cast'><div id='lib:quantity_cast,quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity_cast,quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> ToQS, <span class='keyword'>typename</span> FwdQ, <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity__________________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantitySpecCastableTo'></a><span class='texttt'><i >QuantitySpecCastableTo</i></span><span class='anglebracket'>&lt;</span>Q<span class='operator'>::</span>quantity_spec, ToQS<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity___________________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> quantity_cast<span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.non.mem.conv.html#9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5411'>#</a></div><div class='texpara'><div id='qty.non.mem.conv-9.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> quantity<span class='curlybracket'>{</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span><span class='operator'>.</span><i >numerical-value</i>, <i >make-reference</i><span class='parenthesis'>(</span>ToQS, Q<span class='operator'>::</span>unit<span class='parenthesis'>)</span><span class='curlybracket'>}</span>;
</span></div></div></div></div></div><div id='qty.common.type' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.6.16</a> <span class='texttt'>std&#x200b;::&#x200b;common_<span class='shy'></span>type</span> specializations <a class='abbr_ref' href='qty.common.type.html'>[qty.common.type]</a></h3><div class='texpara'><span class='codeblock'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>mp_units<span class='operator'>::</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity____________________________________________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> Q1, mp_units<span class='operator'>::</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_____________________________________________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> Q2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <span class='keyword'>requires</span> <span class='curlybracket'>{</span>
<span class='curlybracket'>{</span> mp_units<span class='operator'>::</span>get_common_reference<span class='parenthesis'>(</span>Q1<span class='operator'>::</span>reference, Q2<span class='operator'>::</span>reference<span class='parenthesis'>)</span> <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> mp_units<span class='operator'>::</span>Reference;
<span class='keyword'>typename</span> std<span class='operator'>::</span>common_type_t<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q1<span class='operator'>::</span>rep, <span class='keyword'>typename</span> Q2<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>;
<span class='keyword'>requires</span> mp_units<span class='operator'>::</span><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf_________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>common_type_t<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q1<span class='operator'>::</span>rep, <span class='keyword'>typename</span> Q2<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>,
mp_units<span class='operator'>::</span>get_common_quantity_spec<span class='parenthesis'>(</span>Q1<span class='operator'>::</span>quantity_spec,
Q2<span class='operator'>::</span>quantity_spec<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
<span class='keyword'>struct</span> <a class='index' id='lib:std::common_type,quantity_'></a>std<span class='operator'>::</span>common_type<span class='anglebracket'>&lt;</span>Q1, Q2<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> type <span class='operator'>=</span> mp_units<span class='operator'>::</span>quantity<span class='anglebracket'>&lt;</span>mp_units<span class='operator'>::</span>get_common_reference<span class='parenthesis'>(</span>Q1<span class='operator'>::</span>reference, Q2<span class='operator'>::</span>reference<span class='parenthesis'>)</span>,
std<span class='operator'>::</span>common_type_t<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q1<span class='operator'>::</span>rep, <span class='keyword'>typename</span> Q2<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>mp_units<span class='operator'>::</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity______________________________________________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> Q, mp_units<span class='operator'>::</span><a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation__________________________________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Q<span class='operator'>::</span>unit <span class='operator'>=</span><span class='operator'>=</span> mp_units<span class='operator'>::</span>one<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='keyword'>requires</span> <span class='curlybracket'>{</span>
<span class='keyword'>typename</span> mp_units<span class='operator'>::</span>quantity<span class='anglebracket'>&lt;</span>Q<span class='operator'>::</span>reference, std<span class='operator'>::</span>common_type_t<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q<span class='operator'>::</span>rep, Value<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
<span class='keyword'>struct</span> <a class='index' id='lib:std::common_type,quantity__'></a>std<span class='operator'>::</span>common_type<span class='anglebracket'>&lt;</span>Q, Value<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> type <span class='operator'>=</span> mp_units<span class='operator'>::</span>quantity<span class='anglebracket'>&lt;</span>Q<span class='operator'>::</span>reference, std<span class='operator'>::</span>common_type_t<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q<span class='operator'>::</span>rep, Value<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>;
</span></div></div></div><div id='qty.pt' class='section'><h2 ><a class='secnum' style='min-width:65pt'>5.7</a> Quantity point <a class='abbr_ref' href='qty.pt.html'>[qty.pt]</a></h2><div id='qty.pt.general' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.7.1</a> General <a class='abbr_ref' href='qty.pt.general.html'>[qty.pt.general]</a></h3><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.general.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5448'>#</a></div><div class='texpara'><div id='qty.pt.general-1.sentence-1' class='sentence'>Subclause <a href='#qty.pt' title='5.7&emsp;Quantity point'>[qty.<span class='shy'></span>pt]</a> describes the class template <span class='texttt'>quantity_<span class='shy'></span>point</span>
that represents the value of a quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-28">IEC 60050, 112-01-28</a>)
that is an element of an affine space (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-03-02,102-04-01">IEC 60050, 102-03-02,102-04-01</a>)<a class='hidden_link' href='#qty.pt.general-1.sentence-1'>.</a></div></div></div></div><div id='qty.pt.orig' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.7.2</a> Point origin <a class='abbr_ref' href='qty.pt.orig.html'>[qty.pt.orig]</a></h3><div id='qty.pt.orig.general' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.7.2.1</a> General <a class='abbr_ref' href='qty.pt.orig.general.html'>[qty.pt.orig.general]</a></h4><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.orig.general.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5457'>#</a></div><div class='texpara'><div id='qty.pt.orig.general-1.sentence-1' class='sentence'>This subclause specifies the components
for defining the origin of an affine space<a class='hidden_link' href='#qty.pt.orig.general-1.sentence-1'>.</a></div> <div id='qty.pt.orig.general-1.sentence-2' class='sentence'>An <a class='hidden_link' href='#def:origin' title='5.7.2.1&emsp;General&emsp;[qty.pt.orig.general]'><span id='def:origin'><i >origin</i></span></a> is a point from which measurements (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-04-01">IEC 60050, 112-04-01</a>) take place<a class='hidden_link' href='#qty.pt.orig.general-1.sentence-2'>.</a></div></div></div></div><div id='qty.pt.orig.concepts' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.7.2.2</a> Concepts <a class='abbr_ref' href='qty.pt.orig.concepts.html'>[qty.pt.orig.concepts]</a></h4><div class='texpara'><div class='itemdecl' id='qty.pt.orig.concepts-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#qty.pt.orig.concepts-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='concept:PointOrigin'><span id='lib:PointOrigin'><span class='texttt'>PointOrigin</span></span></span></a> <span class='operator'>=</span> <a class='index' id='conceptref:SymbolicConstant____________'></a><span class='texttt'><i >SymbolicConstant</i></span><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>T, <span class='texttt'><i >point-origin-interface</i></span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:PointOriginFor' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='concept:PointOriginFor'><span id='lib:PointOriginFor'><span class='texttt'>PointOriginFor</span></span></span></a> <span class='operator'>=</span> <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin______'><span class='texttt'>PointOrigin</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:QuantitySpecOf' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpecOf__'><span class='texttt'>QuantitySpecOf</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>QS<span class='parenthesis'>)</span>, T<span class='operator'>::</span><span class='texttt'><i >quantity-spec</i></span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> V<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <span class='texttt'><i >SameAbsolutePointOriginAs</i></span><a class='index' id='concept:SameAbsolutePointOriginAs'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
<a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_______'><span class='texttt'>PointOrigin</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin________'><span class='texttt'>PointOrigin</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>V<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='texttt'><i >same-absolute-point-origins</i></span><span class='parenthesis'>(</span>T<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, V<span class='parenthesis'>)</span>;
</code></div></div></div><div id='qty.pt.orig.types' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.7.2.3</a> Types <a class='abbr_ref' href='qty.pt.orig.types.html'>[qty.pt.orig.types]</a></h4><div id='qty.abs.pt.orig' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.7.2.3.1</a> Absolute <a class='abbr_ref' href='qty.abs.pt.orig.html'>[qty.abs.pt.orig]</a></h4><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec______________________________________________________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <span id='lib:absolute_point_origin'><a class='hidden_link' href='#lib:absolute_point_origin' title='5.7.2.3.1&emsp;Absolute&emsp;[qty.abs.pt.orig]'>absolute_point_origin</a></span> <span class='operator'>:</span> <i >point-origin-interface</i> <span class='curlybracket'>{</span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_______________________________________________________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> <i >quantity-spec</i> <span class='operator'>=</span> QS; <span class='comment'>// <i >exposition only</i></span>
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.abs.pt.orig.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5491'>#</a></div><div class='texpara'><div id='qty.abs.pt.orig-1.sentence-1' class='sentence'>An <a class='hidden_link' href='#def:origin,absolute' title='5.7.2.3.1&emsp;Absolute&emsp;[qty.abs.pt.orig]'><span id='def:origin,absolute'><i >absolute origin</i></span></a> is an origin
chosen by convention and not defined in terms of another origin<a class='hidden_link' href='#qty.abs.pt.orig-1.sentence-1'>.</a></div> <div id='qty.abs.pt.orig-1.sentence-2' class='sentence'>A specialization of <span class='texttt'>absolute_<span class='shy'></span>point_<span class='shy'></span>origin</span> is used as a base type when defining an absolute origin<a class='hidden_link' href='#qty.abs.pt.orig-1.sentence-2'>.</a></div> <div id='qty.abs.pt.orig-1.sentence-3' class='sentence'><span class='texttt'>QS</span> is the quantity the origin represents<a class='hidden_link' href='#qty.abs.pt.orig-1.sentence-3'>.</a></div></div></div></div><div id='qty.rel.pt.orig' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.7.2.3.2</a> Relative <a class='abbr_ref' href='qty.rel.pt.orig.html'>[qty.rel.pt.orig]</a></h4><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint________'><span class='tcode_in_codeblock'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> QP<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <span id='lib:relative_point_origin'><a class='hidden_link' href='#lib:relative_point_origin' title='5.7.2.3.2&emsp;Relative&emsp;[qty.rel.pt.orig]'>relative_point_origin</a></span> <span class='operator'>:</span> <i >point-origin-interface</i> <span class='curlybracket'>{</span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint_________'><span class='tcode_in_codeblock'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> <i >quantity-point</i> <span class='operator'>=</span> QP; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec________________________________________________________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> <i >quantity-spec</i> <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> <i >absolute-point-origin</i> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
QP<span class='operator'>.</span>absolute_point_origin;
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.rel.pt.orig.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5513'>#</a></div><div class='texpara'><div id='qty.rel.pt.orig-1.sentence-1' class='sentence'>A <a class='hidden_link' href='#def:origin,relative' title='5.7.2.3.2&emsp;Relative&emsp;[qty.rel.pt.orig]'><span id='def:origin,relative'><i >relative origin</i></span></a> is an origin
of a subspace (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=102-03-03">IEC 60050, 102-03-03</a>)<a class='hidden_link' href='#qty.rel.pt.orig-1.sentence-1'>.</a></div> <div id='qty.rel.pt.orig-1.sentence-2' class='sentence'>A specialization of <span class='texttt'>relative_<span class='shy'></span>point_<span class='shy'></span>origin</span> is used as a base type when defining a relative origin <i >O</i><a class='hidden_link' href='#qty.rel.pt.orig-1.sentence-2'>.</a></div> <div id='qty.rel.pt.orig-1.sentence-3' class='sentence'><i >O</i> is offset from <span class='texttt'>QP<span class='operator'>.</span>absolute_<span class='shy'></span>point_<span class='shy'></span>origin</span> by <span class='texttt'>QP<span class='operator'>.</span>quantity_<span class='shy'></span>from_<span class='shy'></span>zero<span class='parenthesis'>(</span><span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.rel.pt.orig-1.sentence-3'>.</a></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.rel.pt.orig.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5519'>#</a></div><div class='texpara'><div id='qty.rel.pt.orig-2.sentence-1' class='sentence'>The member <span class='texttt'><i >quantity-spec</i></span> is equal to
<span class='texttt'>QP<span class='operator'>.</span>point_<span class='shy'></span>origin<span class='operator'>.</span><span class='texttt'><i >quantity-spec</i></span></span> if
<span class='codeblock'><a class='index' id='conceptref:QuantityKindSpec_____________________'></a><i >QuantityKindSpec</i><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>QP<span class='operator'>.</span><i >quantity-spec</i><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>
</span>
is satisfied, and
to <span class='texttt'>QP<span class='operator'>.</span><span class='texttt'><i >quantity-spec</i></span></span> otherwise<a class='hidden_link' href='#qty.rel.pt.orig-2.sentence-1'>.</a></div></div></div></div><div id='qty.zeroth.pt.orig' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.7.2.3.3</a> Zeroth <a class='abbr_ref' href='qty.zeroth.pt.orig.html'>[qty.zeroth.pt.orig]</a></h4><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_________________________________________________________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> QS<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <span id='lib:zeroth_point_origin_'><a class='hidden_link' href='#lib:zeroth_point_origin_' title='5.7.2.3.3&emsp;Zeroth&emsp;[qty.zeroth.pt.orig]'>zeroth_point_origin_</a></span> <span class='keyword'>final</span> <span class='operator'>:</span> absolute_point_origin<span class='anglebracket'>&lt;</span>QS<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.zeroth.pt.orig.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5539'>#</a></div><div class='texpara'><div id='qty.zeroth.pt.orig-1.sentence-1' class='sentence'><span class='texttt'>zeroth_<span class='shy'></span>point_<span class='shy'></span>origin_<span class='shy'></span><span class='anglebracket'>&lt;</span>QS<span class='anglebracket'>&gt;</span></span> represents an origin
chosen by convention as the value <span class='math'>0</span> of the quantity <span class='texttt'>QS</span><a class='hidden_link' href='#qty.zeroth.pt.orig-1.sentence-1'>.</a></div></div></div></div></div><div id='qty.pt.orig.ops' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.7.2.4</a> Operations <a class='abbr_ref' href='qty.pt.orig.ops.html'>[qty.pt.orig.ops]</a></h4><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>struct</span> <i >point-origin-interface</i> <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin__________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO, <span class='keyword'>typename</span> FwdQ,
<a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf______________________________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>PO<span class='operator'>::</span><i >quantity-spec</i><span class='anglebracket'>&gt;</span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> quantity_point<span class='anglebracket'>&lt;</span>Q<span class='operator'>::</span>reference, PO<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, <span class='keyword'>typename</span> Q<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span>PO, FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_______________________________________________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> FwdQ, <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin___________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO,
<a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf_______________________________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>PO<span class='operator'>::</span><i >quantity-spec</i><span class='anglebracket'>&gt;</span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> quantity_point<span class='anglebracket'>&lt;</span>Q<span class='operator'>::</span>reference, PO<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, <span class='keyword'>typename</span> Q<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q, PO<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin____________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO, <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity________________________________________________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a href='#concept:ReferenceOf' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:ReferenceOf'><span class='tcode_in_codeblock'>ReferenceOf</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>Q<span class='operator'>::</span>reference<span class='parenthesis'>)</span><span class='parenthesis'>)</span>, PO<span class='operator'>::</span><i >quantity-spec</i><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint__________'><span class='tcode_in_codeblock'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span>PO po, <span class='keyword'>const</span> Q<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <span class='keyword'>requires</span> <span class='curlybracket'>{</span> <span class='operator'>-</span>q; <span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_____________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO1, <a class='index' id='conceptref:SameAbsolutePointOriginAs'></a><i >SameAbsolutePointOriginAs</i><span class='anglebracket'>&lt;</span>PO1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span> PO2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_________________________________________________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span>PO1 po1, PO2 po2<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin______________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO1, <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_______________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>PO1 po1, PO2 po2<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></div><div class='texpara'><div id='lib:quantity,operator+'><div id='lib:operator+,quantity'><div id='lib:point-origin-interface,operator+'><div id='lib:operator+,point-origin-interface'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator+,point-origin-interface'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin________________'><span class='texttt'>PointOrigin</span></span></a> PO, <span class='keyword'>typename</span> FwdQ,
<a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf________________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>PO<span class='operator'>::</span><span class='texttt'><i >quantity-spec</i></span><span class='anglebracket'>&gt;</span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> quantity_point<span class='anglebracket'>&lt;</span>Q<span class='operator'>::</span>reference, PO<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, <span class='keyword'>typename</span> Q<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span>PO, FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity__________________________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> FwdQ, <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_________________'><span class='texttt'>PointOrigin</span></span></a> PO,
<a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf_________________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>PO<span class='operator'>::</span><span class='texttt'><i >quantity-spec</i></span><span class='anglebracket'>&gt;</span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> quantity_point<span class='anglebracket'>&lt;</span>Q<span class='operator'>::</span>reference, PO<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, <span class='keyword'>typename</span> Q<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q, PO<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.orig.ops.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5584'>#</a></div><div class='texpara'><div id='qty.pt.orig.ops-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> quantity_<span class='shy'></span>point<span class='curlybracket'>{</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span>, PO<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='curlybracket'>}</span>;</span></div></div></div></div><div class='texpara'><div id='lib:quantity,operator-'><div id='lib:operator-,quantity'><div id='lib:point-origin-interface,operator-'><div id='lib:operator-,point-origin-interface'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator-,point-origin-interface'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin__________________'><span class='texttt'>PointOrigin</span></span></a> PO, <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity___________________________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a href='#concept:ReferenceOf' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:ReferenceOf_'><span class='texttt'>ReferenceOf</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>Q<span class='operator'>::</span>reference<span class='parenthesis'>)</span><span class='parenthesis'>)</span>, PO<span class='operator'>::</span><span class='texttt'><i >quantity-spec</i></span><span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint___________'><span class='texttt'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span>PO po, <span class='keyword'>const</span> Q<span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <span class='keyword'>requires</span> <span class='curlybracket'>{</span> <span class='operator'>-</span>q; <span class='curlybracket'>}</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.orig.ops.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5600'>#</a></div><div class='texpara'><div id='qty.pt.orig.ops-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> po <span class='operator'>+</span> <span class='operator'>-</span>q;</span></div></div></div></div><div class='texpara'><div id='lib:point-origin-interface,operator-_'><div id='lib:operator-,point-origin-interface_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator-,point-origin-interface_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin___________________'><span class='texttt'>PointOrigin</span></span></a> PO1, <a class='index' id='conceptref:SameAbsolutePointOriginAs_'></a><span class='texttt'><i >SameAbsolutePointOriginAs</i></span><span class='anglebracket'>&lt;</span>PO1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span> PO2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity____________________________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span>PO1 po1, PO2 po2<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.orig.ops.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5614'>#</a></div><div class='texpara'><div id='qty.pt.orig.ops-3.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>PO1, absolute_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='keyword'>return</span> po1 <span class='operator'>-</span> po2<span class='operator'>.</span><i >quantity-point</i>;
<span class='curlybracket'>}</span> <span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>PO2, absolute_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='keyword'>return</span> po1<span class='operator'>.</span><i >quantity-point</i> <span class='operator'>-</span> po2;
<span class='curlybracket'>}</span> <span class='keyword'>else</span> <span class='curlybracket'>{</span>
<span class='keyword'>return</span> po1<span class='operator'>.</span><i >quantity-point</i> <span class='operator'>-</span> po2<span class='operator'>.</span><i >quantity-point</i>;
<span class='curlybracket'>}</span>
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.orig.ops.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5627'>#</a></div><div class='texpara'><div id='qty.pt.orig.ops-4.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><a href='#concept:QuantitySpecOf' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpecOf___'><span class='tcode_in_codeblock'>QuantitySpecOf</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>PO1<span class='operator'>::</span><i >quantity-spec</i><span class='parenthesis'>)</span><span class='parenthesis'>)</span>, PO2<span class='operator'>::</span><i >quantity-spec</i><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>PO1, relative_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
<i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>PO2, relative_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
</span></div></div></div></div><div class='texpara'><div id='lib:point-origin-interface,operator=='><div id='lib:operator==,point-origin-interface'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator==,point-origin-interface'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin____________________'><span class='texttt'>PointOrigin</span></span></a> PO1, <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_____________________'><span class='texttt'>PointOrigin</span></span></a> PO2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>PO1 po1, PO2 po2<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.orig.ops.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5644'>#</a></div><div class='texpara'><div id='qty.pt.orig.ops-5.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>PO1, absolute_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>PO2, absolute_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> std<span class='operator'>::</span>is_same_v<span class='anglebracket'>&lt;</span>PO1, PO2<span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span>
<span class='parenthesis'>(</span><i >is-specialization-of</i><span class='anglebracket'>&lt;</span>PO1, zeroth_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<i >is-specialization-of</i><span class='anglebracket'>&lt;</span>PO2, zeroth_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
interconvertible<span class='parenthesis'>(</span>po1<span class='operator'>.</span><i >quantity-spec</i>, po2<span class='operator'>.</span><i >quantity-spec</i><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>PO1, relative_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>PO2, relative_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> PO1<span class='operator'>::</span><i >quantity-point</i> <span class='operator'>=</span><span class='operator'>=</span> PO2<span class='operator'>::</span><i >quantity-point</i>;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>PO1, relative_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> <i >same-absolute-point-origins</i><span class='parenthesis'>(</span>po1, po2<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
is_eq_zero<span class='parenthesis'>(</span>PO1<span class='operator'>::</span><i >quantity-point</i><span class='operator'>.</span>quantity_from_zero<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>PO2, relative_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> <i >same-absolute-point-origins</i><span class='parenthesis'>(</span>po1, po2<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
is_eq_zero<span class='parenthesis'>(</span>PO2<span class='operator'>::</span><i >quantity-point</i><span class='operator'>.</span>quantity_from_zero<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</span></div></div></div></div></div><div id='qty.pt.orig.utils' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.7.2.5</a> Utilities <a class='abbr_ref' href='qty.pt.orig.utils.html'>[qty.pt.orig.utils]</a></h4><div id='qty.same.abs.pt.origs' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.7.2.5.1</a> Same absolute <a class='abbr_ref' href='qty.same.abs.pt.origs.html'>[qty.same.abs.pt.origs]</a></h4><div class='texpara'><div id='lib:same-absolute-point-origins,PointOrigin'><div id='lib:PointOrigin,same-absolute-point-origins'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:PointOrigin,same-absolute-point-origins'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin______________________'><span class='texttt'>PointOrigin</span></span></a> PO1, <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_______________________'><span class='texttt'>PointOrigin</span></span></a> PO2<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='texttt'><i >same-absolute-point-origins</i></span><span class='parenthesis'>(</span>PO1 po1, PO2 po2<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.same.abs.pt.origs.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5677'>#</a></div><div class='texpara'><div id='qty.same.abs.pt.origs-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>PO1, absolute_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>PO2, absolute_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> po1 <span class='operator'>=</span><span class='operator'>=</span> po2;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>PO1, relative_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>PO2, relative_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> po1<span class='operator'>.</span><i >absolute-point-origin</i> <span class='operator'>=</span><span class='operator'>=</span> po2<span class='operator'>.</span><i >absolute-point-origin</i>;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>PO1, relative_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> po1<span class='operator'>.</span><i >absolute-point-origin</i> <span class='operator'>=</span><span class='operator'>=</span> po2;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>PO2, relative_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> po1 <span class='operator'>=</span><span class='operator'>=</span> po2<span class='operator'>.</span><i >absolute-point-origin</i>;
<span class='keyword'>else</span>
<span class='keyword'>return</span> <span class='literal'>false</span>;
</span></div></div></div></div></div><div id='qty.def.pt.orig' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.7.2.5.2</a> Default <a class='abbr_ref' href='qty.def.pt.orig.html'>[qty.def.pt.orig]</a></h4><div class='texpara'><div id='lib:default_point_origin,Reference'><div id='lib:Reference,default_point_origin'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:Reference,default_point_origin'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference___________________________________________________'><span class='texttt'>Reference</span></span></a> R<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <a href='#concept:PointOriginFor' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOriginFor__'><span class='texttt'>PointOriginFor</span></span></a><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> default_point_origin<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.def.pt.orig.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5705'>#</a></div><div class='texpara'><div id='qty.def.pt.orig-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><span class='keyword'>requires</span> <span class='curlybracket'>{</span> get_unit<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='operator'>.</span><i >point-origin</i>; <span class='curlybracket'>}</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> get_unit<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='operator'>.</span><i >point-origin</i>;
<span class='keyword'>else</span>
<span class='keyword'>return</span> zeroth_point_origin<span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>;
</span></div></div></div></div></div></div></div><div id='qty.pt.like' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.7.3</a> Interoperability <a class='abbr_ref' href='qty.pt.like.html'>[qty.pt.like]</a></h3><div class='texpara'><div class='itemdecl' id='concept:QuantityPointLike'><div class='marginalizedparent'><a class='itemDeclLink' href='#concept:QuantityPointLike'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:QuantityPointLike' title='5.7.3&emsp;Interoperability&emsp;[qty.pt.like]'><span id='concept:QuantityPointLike'><span id='lib:QuantityPointLike'><span class='texttt'>QuantityPointLike</span></span></span></a> <span class='operator'>=</span>
<span class='operator'>!</span><a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint____________'><span class='texttt'>QuantityPoint</span></span></a><span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a class='index' id='conceptref:qty-like-impl__'></a><span class='texttt'><i >qty-like-impl</i></span><span class='anglebracket'>&lt;</span>T, quantity_point_like_traits<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='comment'>// see <a href='#qty.like' title='5.6.2&emsp;Interoperability'>[qty.<span class='shy'></span>like]</a></span>
<span class='keyword'>requires</span> <span class='curlybracket'>{</span>
<span class='keyword'>typename</span> quantity_point<span class='anglebracket'>&lt;</span>quantity_point_like_traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>reference,
quantity_point_like_traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>point_origin,
<span class='keyword'>typename</span> quantity_point_like_traits<span class='anglebracket'>&lt;</span>T<span class='anglebracket'>&gt;</span><span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>;
</code></div></div></div><div id='qty.pt.syn' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.7.4</a> Class template <span class='texttt'>quantity_<span class='shy'></span>point</span> <a class='abbr_ref' href='qty.pt.syn.html'>[qty.pt.syn]</a></h3><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> T<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='concept:QuantityPoint'><span id='lib:QuantityPoint'><span class='tcode_in_codeblock'>QuantityPoint</span></span></span></a> <span class='operator'>=</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>T, quantity_point<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> QP, <span class='keyword'>auto</span> V<span class='anglebracket'>&gt;</span>
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='concept:QuantityPointOf'><span id='lib:QuantityPointOf'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></span></a> <span class='operator'>=</span>
<a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint_____________'><span class='tcode_in_codeblock'>QuantityPoint</span></span></a><span class='anglebracket'>&lt;</span>QP<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span><a href='#concept:QuantitySpecOf' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpecOf____'><span class='tcode_in_codeblock'>QuantitySpecOf</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>QP<span class='operator'>::</span>quantity_spec<span class='parenthesis'>)</span><span class='parenthesis'>)</span>, V<span class='anglebracket'>&gt;</span> <span class='operator'>|</span><span class='operator'>|</span>
<a class='index' id='conceptref:SameAbsolutePointOriginAs__'></a><i >SameAbsolutePointOriginAs</i><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>QP<span class='operator'>::</span>absolute_point_origin<span class='parenthesis'>)</span><span class='parenthesis'>)</span>, V<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference____________________________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a> <span class='keyword'>auto</span> R,
<a href='#concept:PointOriginFor' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOriginFor___'><span class='tcode_in_codeblock'>PointOriginFor</span></span></a><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> PO <span class='operator'>=</span> default_point_origin<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span>,
<a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf__________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> Rep <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>class</span> <span id='lib:quantity_point'><a class='hidden_link' href='#lib:quantity_point' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'>quantity_point</a></span> <span class='curlybracket'>{</span>
<span class='keyword'>public</span><span class='operator'>:</span>
<span class='comment'>// member types and values</span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference_____________________________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a> <span class='keyword'>auto</span> reference <span class='operator'>=</span> R;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________________________________________________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> quantity_spec <span class='operator'>=</span> get_quantity_spec<span class='parenthesis'>(</span>reference<span class='parenthesis'>)</span>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:Dimension' title='5.4.2.2&emsp;Concepts&emsp;[qty.dim.concepts]'><span id='conceptref:Dimension____________________________________________'><span class='tcode_in_codeblock'>Dimension</span></span></a> <span class='keyword'>auto</span> dimension <span class='operator'>=</span> quantity_spec<span class='operator'>.</span>dimension;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> unit <span class='operator'>=</span> get_unit<span class='parenthesis'>(</span>reference<span class='parenthesis'>)</span>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin________________________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> absolute_point_origin <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_________________________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> point_origin <span class='operator'>=</span> PO;
<span class='keyword'>using</span> rep <span class='operator'>=</span> Rep;
<span class='keyword'>using</span> quantity_type <span class='operator'>=</span> quantity<span class='anglebracket'>&lt;</span>reference, Rep<span class='anglebracket'>&gt;</span>;
quantity_type <i >quantity-from-origin</i>; <span class='comment'>// <i >exposition only</i></span>
<span class='comment'>// <a href='#qty.pt.static' title='5.7.5&emsp;Static member functions'>[qty.<span class='shy'></span>pt.<span class='shy'></span>static]</a>, static member functions</span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> quantity_point min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> quantity_point max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// <a href='#qty.pt.cons' title='5.7.6&emsp;Constructors'>[qty.<span class='shy'></span>pt.<span class='shy'></span>cons]</a>, constructors and assignment</span>
quantity_point<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>;
quantity_point<span class='parenthesis'>(</span><span class='keyword'>const</span> quantity_point<span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>;
quantity_point<span class='parenthesis'>(</span>quantity_point<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>;
<span class='operator'>~</span>quantity_point<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf__________________________________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span>quantity_type, FwdQ<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span>point_origin <span class='operator'>=</span><span class='operator'>=</span> default_point_origin<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span>implicitly_convertible<span class='parenthesis'>(</span>Q<span class='operator'>::</span>quantity_spec, quantity_spec<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> <span class='keyword'>explicit</span> quantity_point<span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf___________________________________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span>quantity_type, FwdQ<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> quantity_point<span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q, <span class='keyword'>decltype</span><span class='parenthesis'>(</span>PO<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin__________________________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO2,
<a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf____________________________________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>PO2<span class='operator'>::</span><i >quantity-spec</i><span class='anglebracket'>&gt;</span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span>quantity_type, FwdQ<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:SameAbsolutePointOriginAs___'></a><i >SameAbsolutePointOriginAs</i><span class='anglebracket'>&lt;</span>PO2, PO<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> quantity_point<span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q, PO2<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>absolute_point_origin<span class='anglebracket'>&gt;</span> QP<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span>quantity_type, <span class='keyword'>typename</span> QP<span class='operator'>::</span>quantity_type<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>explicit</span><span class='parenthesis'>(</span><span class='operator'>!</span>std<span class='operator'>::</span>convertible_to<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> QP<span class='operator'>::</span>quantity_type, quantity_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
quantity_point<span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantityPointLike' title='5.7.3&emsp;Interoperability&emsp;[qty.pt.like]'><span id='conceptref:QuantityPointLike'><span class='tcode_in_codeblock'>QuantityPointLike</span></span></a> QP<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <span class='keyword'>explicit</span><span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span> quantity_point<span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>;
quantity_point<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> quantity_point<span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>;
quantity_point<span class='operator'>&amp;</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>quantity_point<span class='operator'>&amp;</span><span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>;
<span class='comment'>// <a href='#qty.pt.conv' title='5.7.7&emsp;Conversions'>[qty.<span class='shy'></span>pt.<span class='shy'></span>conv]</a>, conversions</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:SameAbsolutePointOriginAs____'></a><i >SameAbsolutePointOriginAs</i><span class='anglebracket'>&lt;</span>absolute_point_origin<span class='anglebracket'>&gt;</span> NewPO<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf_'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>NewPO<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> point_for<span class='parenthesis'>(</span>NewPO new_origin<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:UnitCompatibleWith____________'></a><i >UnitCompatibleWith</i><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> ToU<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf__'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> in<span class='parenthesis'>(</span>ToU<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf___________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> ToRep<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf___'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> in<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf____________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> ToRep,
<a class='index' id='conceptref:UnitCompatibleWith_____________'></a><i >UnitCompatibleWith</i><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> ToU<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf____'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> in<span class='parenthesis'>(</span>ToU<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:UnitCompatibleWith______________'></a><i >UnitCompatibleWith</i><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> ToU<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf_____'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> force_in<span class='parenthesis'>(</span>ToU<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf_____________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> ToRep<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf______'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> force_in<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf______________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> ToRep,
<a class='index' id='conceptref:UnitCompatibleWith_______________'></a><i >UnitCompatibleWith</i><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> ToU<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf_______'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> force_in<span class='parenthesis'>(</span>ToU<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='comment'>// <a href='#qty.pt.obs' title='5.7.8&emsp;Quantity value observers'>[qty.<span class='shy'></span>pt.<span class='shy'></span>obs]</a>, quantity value observers</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin___________________________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>PO2<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>=</span><span class='operator'>=</span> point_origin<span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> quantity_type<span class='operator'>&amp;</span> quantity_ref_from<span class='parenthesis'>(</span>PO2<span class='parenthesis'>)</span> <span class='operator'>&amp;</span> <span class='keyword'>noexcept</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin____________________________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>PO2<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>=</span><span class='operator'>=</span> point_origin<span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> <span class='keyword'>const</span> quantity_type<span class='operator'>&amp;</span> quantity_ref_from<span class='parenthesis'>(</span>PO2<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='operator'>&amp;</span> <span class='keyword'>noexcept</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_____________________________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>PO2<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>=</span><span class='operator'>=</span> point_origin<span class='parenthesis'>)</span>
<span class='keyword'>void</span> quantity_ref_from<span class='parenthesis'>(</span>PO2<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin______________________________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='keyword'>const</span> quantity_point qp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> qp <span class='operator'>-</span> PO2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>; <span class='curlybracket'>}</span>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_____________________________________________________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> quantity_from<span class='parenthesis'>(</span>PO2<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf________'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>absolute_point_origin<span class='anglebracket'>&gt;</span> QP<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity______________________________________________________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> quantity_from<span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&amp;</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_______________________________________________________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> quantity_from_zero<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='comment'>// <a href='#qty.pt.conv.ops' title='5.7.9&emsp;Conversion operations'>[qty.<span class='shy'></span>pt.<span class='shy'></span>conv.<span class='shy'></span>ops]</a>, conversion operations</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> QP_, <a href='#concept:QuantityPointLike' title='5.7.3&emsp;Interoperability&emsp;[qty.pt.like]'><span id='conceptref:QuantityPointLike_'><span class='tcode_in_codeblock'>QuantityPointLike</span></span></a> QP <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>QP_<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <span class='keyword'>explicit</span><span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span> <span class='keyword'>operator</span> QP_<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='operator'>&amp;</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> QP_, <a href='#concept:QuantityPointLike' title='5.7.3&emsp;Interoperability&emsp;[qty.pt.like]'><span id='conceptref:QuantityPointLike__'><span class='tcode_in_codeblock'>QuantityPointLike</span></span></a> QP <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>QP_<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <span class='keyword'>explicit</span><span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span> <span class='keyword'>operator</span> QP_<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#qty.pt.unary.ops' title='5.7.10&emsp;Unary operations'>[qty.<span class='shy'></span>pt.<span class='shy'></span>unary.<span class='shy'></span>ops]</a>, unary operations</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable__________________'></a><i >Mutable</i><span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='operator'>+</span><span class='parenthesis'>(</span>QP<span class='operator'>&amp;</span><span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable___________________'></a><i >Mutable</i><span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='operator'>-</span><span class='parenthesis'>(</span>QP<span class='operator'>&amp;</span><span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>constexpr</span> quantity_point <span class='keyword'>operator</span><span class='operator'>+</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='keyword'>int</span><span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>constexpr</span> quantity_point <span class='keyword'>operator</span><span class='operator'>-</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='keyword'>int</span><span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='comment'>// <a href='#qty.pt.assign.ops' title='5.7.11&emsp;Compound assignment operations'>[qty.<span class='shy'></span>pt.<span class='shy'></span>assign.<span class='shy'></span>ops]</a>, compound assignment operations</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable____________________'></a><i >Mutable</i><span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='operator'>=</span><span class='parenthesis'>(</span>QP<span class='operator'>&amp;</span><span class='operator'>&amp;</span> qp, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable_____________________'></a><i >Mutable</i><span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='operator'>=</span><span class='parenthesis'>(</span>QP<span class='operator'>&amp;</span><span class='operator'>&amp;</span> qp, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#qty.pt.arith.ops' title='5.7.12&emsp;Arithmetic operations'>[qty.<span class='shy'></span>pt.<span class='shy'></span>arith.<span class='shy'></span>ops]</a>, arithmetic operations</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint______________'><span class='tcode_in_codeblock'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&amp;</span> qp, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint_______________'><span class='tcode_in_codeblock'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> q, <span class='keyword'>const</span> QP<span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint________________'><span class='tcode_in_codeblock'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&amp;</span> qp, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf_________'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>absolute_point_origin<span class='anglebracket'>&gt;</span> QP2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> QP2<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_______________________________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&amp;</span> qp, PO2 po<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin________________________________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity__________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span>PO2 po, <span class='keyword'>const</span> QP<span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>;
<span class='comment'>// <a href='#qty.pt.cmp' title='5.7.13&emsp;Comparison'>[qty.<span class='shy'></span>pt.<span class='shy'></span>cmp]</a>, comparison</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf__________'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>absolute_point_origin<span class='anglebracket'>&gt;</span> QP2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> QP2<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf___________'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>absolute_point_origin<span class='anglebracket'>&gt;</span> QP2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<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> QP<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> QP2<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity___________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> Q<span class='anglebracket'>&gt;</span>
<span class='keyword'>explicit</span> quantity_point<span class='parenthesis'>(</span>Q q<span class='parenthesis'>)</span>
<span class='operator'>-</span><span class='anglebracket'>&gt;</span> quantity_point<span class='anglebracket'>&lt;</span>Q<span class='operator'>::</span>reference, default_point_origin<span class='parenthesis'>(</span>Q<span class='operator'>::</span>reference<span class='parenthesis'>)</span>, <span class='keyword'>typename</span> Q<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity____________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> Q, <a href='#concept:PointOriginFor' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOriginFor____'><span class='tcode_in_codeblock'>PointOriginFor</span></span></a><span class='anglebracket'>&lt;</span>Q<span class='operator'>::</span>quantity_spec<span class='anglebracket'>&gt;</span> PO<span class='anglebracket'>&gt;</span>
quantity_point<span class='parenthesis'>(</span>Q, PO<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> quantity_point<span class='anglebracket'>&lt;</span>Q<span class='operator'>::</span>reference, PO<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, <span class='keyword'>typename</span> Q<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantityPointLike' title='5.7.3&emsp;Interoperability&emsp;[qty.pt.like]'><span id='conceptref:QuantityPointLike___'><span class='tcode_in_codeblock'>QuantityPointLike</span></span></a> QP, <span class='keyword'>typename</span> Traits <span class='operator'>=</span> quantity_point_like_traits<span class='anglebracket'>&lt;</span>QP<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>explicit</span><span class='parenthesis'>(</span>quantity_point_like_traits<span class='anglebracket'>&lt;</span>QP<span class='anglebracket'>&gt;</span><span class='operator'>::</span>explicit_import<span class='parenthesis'>)</span> quantity_point<span class='parenthesis'>(</span>QP<span class='parenthesis'>)</span>
<span class='operator'>-</span><span class='anglebracket'>&gt;</span> quantity_point<span class='anglebracket'>&lt;</span>Traits<span class='operator'>::</span>reference, Traits<span class='operator'>::</span>point_origin, <span class='keyword'>typename</span> Traits<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>;
<span class='curlybracket'>}</span>
</span></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.syn.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5928'>#</a></div><div class='texpara'><div id='qty.pt.syn-1.sentence-1' class='sentence'><span class='texttt'>quantity_<span class='shy'></span>point<span class='anglebracket'>&lt;</span>R, PO, Rep<span class='anglebracket'>&gt;</span></span> is a structural type (<a href="https://wg21.link/temp.paramterm.structural.type">N4971, [temp.param]</a>)
if <span class='texttt'>Rep</span> is a structural type<a class='hidden_link' href='#qty.pt.syn-1.sentence-1'>.</a></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.syn.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5932'>#</a></div><div class='texpara'><div id='qty.pt.syn-2.sentence-1' class='sentence'>The member <span class='texttt'>absolute_<span class='shy'></span>point_<span class='shy'></span>origin</span> is equal to <span class='texttt'>PO</span> if
<span class='codeblock'><i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>PO<span class='parenthesis'>)</span>, absolute_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>
</span>
is <span class='texttt'><span class='literal'>true</span></span>, and
to <span class='texttt'>PO<span class='operator'>.</span><span class='texttt'><i >quantity-point</i></span><span class='operator'>.</span>absolute_<span class='shy'></span>point_<span class='shy'></span>origin</span> otherwise<a class='hidden_link' href='#qty.pt.syn-2.sentence-1'>.</a></div></div></div></div><div id='qty.pt.static' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.7.5</a> Static member functions <a class='abbr_ref' href='qty.pt.static.html'>[qty.pt.static]</a></h3><div class='texpara'><div id='lib:quantity_point,max'><div id='lib:max,quantity_point'><div id='lib:quantity_point,min'><div id='lib:min,quantity_point'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:min,quantity_point'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>static</span> <span class='keyword'>constexpr</span> quantity_point min<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> quantity_point max<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.static.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5952'>#</a></div><div class='texpara'><div id='qty.pt.static-1.sentence-1' class='sentence'>Let <i >F</i> be one of <span class='texttt'>min</span> and <span class='texttt'>max</span><a class='hidden_link' href='#qty.pt.static-1.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.static.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5955'>#</a></div><div class='texpara'><div id='qty.pt.static-2.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><span class='curlybracket'>{</span>quantity_<span class='shy'></span>type<span class='operator'>&#x200b;::&#x200b;</span><i >F</i><span class='parenthesis'>(</span><span class='parenthesis'>)</span>, PO<span class='curlybracket'>}</span></span><a class='hidden_link' href='#qty.pt.static-2.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.static.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5959'>#</a></div><div class='texpara'><div id='qty.pt.static-3.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='keyword'>requires</span> <span class='curlybracket'>{</span> quantity_type<span class='operator'>::</span><i >F</i><span class='parenthesis'>(</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
</span></div></div></div></div></div><div id='qty.pt.cons' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.7.6</a> Constructors <a class='abbr_ref' href='qty.pt.cons.html'>[qty.pt.cons]</a></h3><div class='texpara'><div id='lib:quantity_point,constructor'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity_point,constructor'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf_____________________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span>quantity_type, FwdQ<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span>point_origin <span class='operator'>=</span><span class='operator'>=</span> default_point_origin<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span>implicitly_convertible<span class='parenthesis'>(</span>Q<span class='operator'>::</span>quantity_spec, quantity_spec<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> <span class='keyword'>explicit</span> quantity_point<span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf______________________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span>quantity_type, FwdQ<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> quantity_point<span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q, <span class='keyword'>decltype</span><span class='parenthesis'>(</span>PO<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.cons.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5983'>#</a></div><div class='texpara'><div id='qty.pt.cons-1.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'><i >quantity-from-origin</i></span> with <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.pt.cons-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:quantity_point,constructor_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity_point,constructor_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_________________________________'><span class='texttt'>PointOrigin</span></span></a> PO2,
<a href='#concept:QuantityOf' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:QuantityOf_______________________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'>&lt;</span>PO2<span class='operator'>::</span><span class='texttt'><i >quantity-spec</i></span><span class='anglebracket'>&gt;</span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span>quantity_type, FwdQ<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a class='index' id='conceptref:SameAbsolutePointOriginAs_____'></a><span class='texttt'><i >SameAbsolutePointOriginAs</i></span><span class='anglebracket'>&lt;</span>PO2, PO<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> quantity_point<span class='parenthesis'>(</span>FwdQ<span class='operator'>&amp;</span><span class='operator'>&amp;</span> q, PO2<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.cons.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L5997'>#</a></div><div class='texpara'><div id='qty.pt.cons-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'>quantity_point<span class='parenthesis'>(</span>quantity_point<span class='anglebracket'>&lt;</span>Q<span class='operator'>::</span>reference, PO2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, <span class='keyword'>typename</span> Q<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span><span class='curlybracket'>{</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>FwdQ<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span>,
PO2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>
</span></div></div></div></div><div class='texpara'><div id='lib:quantity_point,constructor__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity_point,constructor__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf____________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>absolute_point_origin<span class='anglebracket'>&gt;</span> QP<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span>quantity_type, <span class='keyword'>typename</span> QP<span class='operator'>::</span>quantity_type<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <span class='keyword'>explicit</span><span class='parenthesis'>(</span><span class='operator'>!</span>std<span class='operator'>::</span>convertible_to<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> QP<span class='operator'>::</span>quantity_type, quantity_type<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
quantity_point<span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.cons.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6015'>#</a></div><div class='texpara'><div id='qty.pt.cons-3.sentence-1' class='sentence'><i >Effects</i>: If <span class='texttt'>point_<span class='shy'></span>origin <span class='operator'>=</span><span class='operator'>=</span> QP<span class='operator'>&#x200b;::&#x200b;</span>point_<span class='shy'></span>origin</span> is <span class='texttt'><span class='literal'>true</span></span>,
initializes <span class='texttt'><i >quantity-from-origin</i></span> with <span class='texttt'>qp<span class='operator'>.</span>quantity_<span class='shy'></span>ref_<span class='shy'></span>from<span class='parenthesis'>(</span>point_<span class='shy'></span>origin<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.pt.cons-3.sentence-1'>.</a></div> <div id='qty.pt.cons-3.sentence-2' class='sentence'>Otherwise, initializes <span class='texttt'><i >quantity-from-origin</i></span> with <span class='texttt'>qp <span class='operator'>-</span> point_<span class='shy'></span>origin</span><a class='hidden_link' href='#qty.pt.cons-3.sentence-2'>.</a></div></div></div></div><div class='texpara'><div id='lib:quantity_point,constructor___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity_point,constructor___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantityPointLike' title='5.7.3&emsp;Interoperability&emsp;[qty.pt.like]'><span id='conceptref:QuantityPointLike____'><span class='texttt'>QuantityPointLike</span></span></a> QP<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <span class='keyword'>explicit</span><span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span> quantity_point<span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>;
</code></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.cons.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6030'>#</a></div><div class='texpara'><div id='qty.pt.cons-4.sentence-1' class='sentence'>Let <span class='texttt'>Traits</span> be <span class='texttt'>quantity_<span class='shy'></span>point_<span class='shy'></span>like_<span class='shy'></span>traits<span class='anglebracket'>&lt;</span>QP<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.pt.cons-4.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.cons.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6033'>#</a></div><div class='texpara'><div id='qty.pt.cons-5.sentence-1' class='sentence'><i >Effects</i>: Initializes <span class='texttt'><i >quantity-from-origin</i></span> with
<span class='codeblock'>Traits<span class='operator'>::</span>to_numerical_value<span class='parenthesis'>(</span>qp<span class='parenthesis'>)</span>, get_unit<span class='parenthesis'>(</span>Traits<span class='operator'>::</span>reference<span class='parenthesis'>)</span>
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.cons.html#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6040'>#</a></div><div class='texpara'><div id='qty.pt.cons-6.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='parenthesis'>(</span>Traits<span class='operator'>::</span>point_origin <span class='operator'>=</span><span class='operator'>=</span> point_origin<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
std<span class='operator'>::</span>convertible_to<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&lt;</span>Traits<span class='operator'>::</span>reference, <span class='keyword'>typename</span> Traits<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>, quantity_type<span class='anglebracket'>&gt;</span>
</span></div> <div id='qty.pt.cons-6.sentence-2' class='sentence'>
The expression inside <span class='texttt'><span class='keyword'>explicit</span></span> is equivalent to:
<span class='codeblock'>Traits<span class='operator'>::</span>explicit_import <span class='operator'>|</span><span class='operator'>|</span>
<span class='operator'>!</span>std<span class='operator'>::</span>convertible_to<span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&lt;</span>Traits<span class='operator'>::</span>reference, <span class='keyword'>typename</span> Traits<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>, quantity_type<span class='anglebracket'>&gt;</span>
</span></div></div></div></div></div><div id='qty.pt.conv' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.7.7</a> Conversions <a class='abbr_ref' href='qty.pt.conv.html'>[qty.pt.conv]</a></h3><div class='texpara'><div id='lib:quantity_point,point_for'><div id='lib:point_for,quantity_point'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:point_for,quantity_point'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:SameAbsolutePointOriginAs______'></a><span class='texttt'><i >SameAbsolutePointOriginAs</i></span><span class='anglebracket'>&lt;</span>absolute_point_origin<span class='anglebracket'>&gt;</span> NewPO<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf_____________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span><span class='parenthesis'>(</span>NewPO<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> point_for<span class='parenthesis'>(</span>NewPO new_origin<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.conv.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6063'>#</a></div><div class='texpara'><div id='qty.pt.conv-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>std<span class='operator'>::</span>is_same_v<span class='anglebracket'>&lt;</span>NewPO, <span class='keyword'>decltype</span><span class='parenthesis'>(</span>point_origin<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> <span class='operator'>*</span><span class='keyword'>this</span>;
<span class='keyword'>else</span>
<span class='keyword'>return</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>quantity_point<span class='curlybracket'>{</span><span class='operator'>*</span><span class='keyword'>this</span> <span class='operator'>-</span> new_origin, new_origin<span class='curlybracket'>}</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:quantity_point,force_in'><div id='lib:force_in,quantity_point'><div id='lib:quantity_point,in'><div id='lib:in,quantity_point'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:in,quantity_point'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:UnitCompatibleWith________________'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> ToU<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf______________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> in<span class='parenthesis'>(</span>ToU<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf_______________________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> ToRep<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf_______________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> in<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf________________________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> ToRep,
<a class='index' id='conceptref:UnitCompatibleWith_________________'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> ToU<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf________________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> in<span class='parenthesis'>(</span>ToU<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:UnitCompatibleWith__________________'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> ToU<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf_________________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> force_in<span class='parenthesis'>(</span>ToU<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf_________________________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> ToRep<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf__________________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> force_in<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf__________________________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> ToRep,
<a class='index' id='conceptref:UnitCompatibleWith___________________'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'>&lt;</span>unit, quantity_spec<span class='anglebracket'>&gt;</span> ToU<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf___________________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='keyword'>auto</span> force_in<span class='parenthesis'>(</span>ToU<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.conv.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6105'>#</a></div><div class='texpara'><div id='qty.pt.conv-2.sentence-1' class='sentence'>Let <span class='texttt'><i >converted-quantity-expr</i></span> be an expression denoting
the function call to the corresponding member of <span class='texttt'>quantity_<span class='shy'></span>ref_<span class='shy'></span>from<span class='parenthesis'>(</span>point_<span class='shy'></span>origin<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.pt.conv-2.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.conv.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6109'>#</a></div><div class='texpara'><div id='qty.pt.conv-3.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>quantity_point<span class='curlybracket'>{</span><i >converted-quantity-expr</i>, point_origin<span class='curlybracket'>}</span>;
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.conv.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6116'>#</a></div><div class='texpara'><div id='qty.pt.conv-4.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='keyword'>requires</span> <span class='curlybracket'>{</span> <i >converted-quantity-expr</i>; <span class='curlybracket'>}</span>
</span></div></div></div></div></div><div id='qty.pt.obs' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.7.8</a> Quantity value observers <a class='abbr_ref' href='qty.pt.obs.html'>[qty.pt.obs]</a></h3><div class='texpara'><div id='lib:quantity_point,quantity_ref_from'><div id='lib:quantity_ref_from,quantity_point'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity_ref_from,quantity_point'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin__________________________________'><span class='texttt'>PointOrigin</span></span></a> PO2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>PO2<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>=</span><span class='operator'>=</span> point_origin<span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> quantity_type<span class='operator'>&amp;</span> quantity_ref_from<span class='parenthesis'>(</span>PO2<span class='parenthesis'>)</span> <span class='operator'>&amp;</span> <span class='keyword'>noexcept</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin___________________________________'><span class='texttt'>PointOrigin</span></span></a> PO2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>PO2<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>=</span><span class='operator'>=</span> point_origin<span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> <span class='keyword'>const</span> quantity_type<span class='operator'>&amp;</span> quantity_ref_from<span class='parenthesis'>(</span>PO2<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='operator'>&amp;</span> <span class='keyword'>noexcept</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.obs.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6137'>#</a></div><div class='texpara'><div id='qty.pt.obs-1.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><i >quantity-from-origin</i></span><a class='hidden_link' href='#qty.pt.obs-1.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:quantity_point,quantity_from'><div id='lib:quantity_from,quantity_point'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity_from,quantity_point'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin____________________________________'><span class='texttt'>PointOrigin</span></span></a> PO2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='keyword'>const</span> quantity_point qp<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> qp <span class='operator'>-</span> PO2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>; <span class='curlybracket'>}</span>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_____________________________________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> quantity_from<span class='parenthesis'>(</span>PO2 rhs<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf____________________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>absolute_point_origin<span class='anglebracket'>&gt;</span> QP<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity______________________________________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> quantity_from<span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.obs.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6153'>#</a></div><div class='texpara'><div id='qty.pt.obs-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> <span class='operator'>*</span><span class='keyword'>this</span> <span class='operator'>-</span> rhs;</span></div></div></div></div><div class='texpara'><div id='lib:quantity_point,quantity_from_zero'><div id='lib:quantity_from_zero,quantity_point'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity_from_zero,quantity_point'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_______________________________________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> quantity_from_zero<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.obs.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6165'>#</a></div><div class='texpara'><div id='qty.pt.obs-3.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><span class='keyword'>requires</span> <span class='curlybracket'>{</span> unit<span class='operator'>.</span><i >point-origin</i>; <span class='curlybracket'>}</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='comment'>// can lose the input unit</span>
<span class='keyword'>const</span> <span class='keyword'>auto</span> q <span class='operator'>=</span> quantity_from<span class='parenthesis'>(</span>unit<span class='operator'>.</span><i >point-origin</i><span class='parenthesis'>)</span>;
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><span class='keyword'>requires</span> <span class='curlybracket'>{</span> q<span class='operator'>.</span>in<span class='parenthesis'>(</span>unit<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span><span class='parenthesis'>)</span>
<span class='comment'>// restore the unit</span>
<span class='keyword'>return</span> q<span class='operator'>.</span>in<span class='parenthesis'>(</span>unit<span class='parenthesis'>)</span>;
<span class='keyword'>else</span>
<span class='keyword'>return</span> q;
<span class='curlybracket'>}</span> <span class='keyword'>else</span>
<span class='keyword'>return</span> quantity_from<span class='parenthesis'>(</span>absolute_point_origin<span class='parenthesis'>)</span>;
</span></div></div></div></div></div><div id='qty.pt.conv.ops' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.7.9</a> Conversion operations <a class='abbr_ref' href='qty.pt.conv.ops.html'>[qty.pt.conv.ops]</a></h3><div class='texpara'><div id='lib:quantity_point,operator_QuantityPointLike'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity_point,operator_QuantityPointLike'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> QP_, <a href='#concept:QuantityPointLike' title='5.7.3&emsp;Interoperability&emsp;[qty.pt.like]'><span id='conceptref:QuantityPointLike_____'><span class='texttt'>QuantityPointLike</span></span></a> QP <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>QP_<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <span class='keyword'>explicit</span><span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span> <span class='keyword'>operator</span> QP_<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='operator'>&amp;</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> QP_, <a href='#concept:QuantityPointLike' title='5.7.3&emsp;Interoperability&emsp;[qty.pt.like]'><span id='conceptref:QuantityPointLike______'><span class='texttt'>QuantityPointLike</span></span></a> QP <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>QP_<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <span class='keyword'>explicit</span><span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span> <span class='keyword'>operator</span> QP_<span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span><i ><span class='texttt'>see below</span></i><span class='parenthesis'>)</span>;
</code></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.conv.ops.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6195'>#</a></div><div class='texpara'><div id='qty.pt.conv.ops-1.sentence-1' class='sentence'>Let <span class='texttt'>Traits</span> be <span class='texttt'>quantity_<span class='shy'></span>point_<span class='shy'></span>like_<span class='shy'></span>traits<span class='anglebracket'>&lt;</span>QP<span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.pt.conv.ops-1.sentence-1'>.</a></div> <div id='qty.pt.conv.ops-1.sentence-2' class='sentence'>Let <span class='texttt'><i >result-expr</i></span> be
<span class='codeblock'>Traits<span class='operator'>::</span>from_numerical_value<span class='parenthesis'>(</span>std<span class='operator'>::</span>move<span class='parenthesis'>(</span><i >quantity-from-origin</i><span class='parenthesis'>)</span><span class='operator'>.</span><i >numerical-value</i><span class='parenthesis'>)</span>
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.conv.ops.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6202'>#</a></div><div class='texpara'><div id='qty.pt.conv.ops-2.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'><i >result-expr</i></span><a class='hidden_link' href='#qty.pt.conv.ops-2.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.conv.ops.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6206'>#</a></div><div class='texpara'><div id='qty.pt.conv.ops-3.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='parenthesis'>(</span>point_origin <span class='operator'>=</span><span class='operator'>=</span> Traits<span class='operator'>::</span>point_origin<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
std<span class='operator'>::</span>convertible_to<span class='anglebracket'>&lt;</span>quantity_type, quantity<span class='anglebracket'>&lt;</span>Traits<span class='operator'>::</span>reference, <span class='keyword'>typename</span> Traits<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
</span></div> <div id='qty.pt.conv.ops-3.sentence-2' class='sentence'>
The expression inside <span class='texttt'><span class='keyword'>explicit</span></span> is equivalent to:
<span class='codeblock'>Traits<span class='operator'>::</span>explicit_export <span class='operator'>|</span><span class='operator'>|</span>
<span class='operator'>!</span>std<span class='operator'>::</span>convertible_to<span class='anglebracket'>&lt;</span>quantity_type, quantity<span class='anglebracket'>&lt;</span>Traits<span class='operator'>::</span>reference, <span class='keyword'>typename</span> Traits<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
</span></div> <div id='qty.pt.conv.ops-3.sentence-3' class='sentence'>
Let <i >T</i> be
<span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>nothrow_<span class='shy'></span>copy_<span class='shy'></span>constructible_<span class='shy'></span>v</span> for the first signature, and
<span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>is_<span class='shy'></span>nothrow_<span class='shy'></span>move_<span class='shy'></span>constructible_<span class='shy'></span>v</span> for the second signature<a class='hidden_link' href='#qty.pt.conv.ops-3.sentence-3'>.</a></div> <div id='qty.pt.conv.ops-3.sentence-4' class='sentence'>The exception specification is equivalent to:
<span class='codeblock'><span class='keyword'>noexcept</span><span class='parenthesis'>(</span><i >result-expr</i><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <i >T</i><span class='anglebracket'>&lt;</span>rep<span class='anglebracket'>&gt;</span>
</span></div></div></div></div></div><div id='qty.pt.unary.ops' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.7.10</a> Unary operations <a class='abbr_ref' href='qty.pt.unary.ops.html'>[qty.pt.unary.ops]</a></h3><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.unary.ops.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6229'>#</a></div><div class='texpara'><div id='qty.pt.unary.ops-1.sentence-1' class='sentence'>In the following descriptions,
let <span class='texttt'>@</span> be the <span class='textsf'><i >operator</i></span><a class='hidden_link' href='#qty.pt.unary.ops-1.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:quantity_point,operator--'><div id='lib:operator--,quantity_point'><div id='lib:quantity_point,operator++'><div id='lib:operator++,quantity_point'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator++,quantity_point'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable______________________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='operator'>+</span><span class='parenthesis'>(</span>QP<span class='operator'>&amp;</span><span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable_______________________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='operator'>-</span><span class='parenthesis'>(</span>QP<span class='operator'>&amp;</span><span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.unary.ops.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6245'>#</a></div><div class='texpara'><div id='qty.pt.unary.ops-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to
<span class='texttt'>@qp<span class='operator'>.</span><span class='texttt'><i >quantity-from-origin</i></span></span><a class='hidden_link' href='#qty.pt.unary.ops-2.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.unary.ops.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6250'>#</a></div><div class='texpara'><div id='qty.pt.unary.ops-3.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>QP<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>qp<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.pt.unary.ops-3.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.unary.ops.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6254'>#</a></div><div class='texpara'><div id='qty.pt.unary.ops-4.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='keyword'>requires</span> <span class='curlybracket'>{</span> @qp<span class='operator'>.</span><i >quantity-from-origin</i>; <span class='curlybracket'>}</span>
</span></div></div></div></div><div class='texpara'><div id='lib:quantity_point,operator--_'><div id='lib:operator--,quantity_point_'><div id='lib:quantity_point,operator++_'><div id='lib:operator++,quantity_point_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator++,quantity_point_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>constexpr</span> quantity_point <span class='keyword'>operator</span><span class='operator'>+</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='keyword'>int</span><span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>constexpr</span> quantity_point <span class='keyword'>operator</span><span class='operator'>-</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='keyword'>int</span><span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.unary.ops.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6272'>#</a></div><div class='texpara'><div id='qty.pt.unary.ops-5.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> <span class='curlybracket'>{</span><span class='texttt'><i >quantity-from-origin</i></span>@, PO<span class='curlybracket'>}</span>;</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.unary.ops.html#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6277'>#</a></div><div class='texpara'><div id='qty.pt.unary.ops-6.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='keyword'>requires</span> <span class='curlybracket'>{</span> <i >quantity-from-origin</i>@; <span class='curlybracket'>}</span>
</span></div></div></div></div></div><div id='qty.pt.assign.ops' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.7.11</a> Compound assignment operations <a class='abbr_ref' href='qty.pt.assign.ops.html'>[qty.pt.assign.ops]</a></h3><div class='texpara'><div id='lib:quantity,operator-=_'><div id='lib:operator-=,quantity_'><div id='lib:quantity_point,operator-='><div id='lib:operator-=,quantity_point'><div id='lib:quantity,operator+=_'><div id='lib:operator+=,quantity_'><div id='lib:quantity_point,operator+='><div id='lib:operator+=,quantity_point'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator+=,quantity_point'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable________________________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='operator'>=</span><span class='parenthesis'>(</span>QP<span class='operator'>&amp;</span><span class='operator'>&amp;</span> qp, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a class='index' id='conceptref:Mutable_________________________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='operator'>=</span><span class='parenthesis'>(</span>QP<span class='operator'>&amp;</span><span class='operator'>&amp;</span> qp, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.assign.ops.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6301'>#</a></div><div class='texpara'><div id='qty.pt.assign.ops-1.sentence-1' class='sentence'>Let <span class='texttt'>@</span> be the <span class='textsf'><i >operator</i></span><a class='hidden_link' href='#qty.pt.assign.ops-1.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.assign.ops.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6304'>#</a></div><div class='texpara'><div id='qty.pt.assign.ops-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to
<span class='texttt'>qp<span class='operator'>.</span><span class='texttt'><i >quantity-from-origin</i></span> @ q</span><a class='hidden_link' href='#qty.pt.assign.ops-2.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.assign.ops.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6309'>#</a></div><div class='texpara'><div id='qty.pt.assign.ops-3.sentence-1' class='sentence'><i >Returns</i>: <span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>QP<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>qp<span class='parenthesis'>)</span></span><a class='hidden_link' href='#qty.pt.assign.ops-3.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.assign.ops.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6313'>#</a></div><div class='texpara'><div id='qty.pt.assign.ops-4.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><a class='index' id='conceptref:QuantityConvertibleTo_________________'></a><i >QuantityConvertibleTo</i><span class='anglebracket'>&lt;</span>quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span>, quantity_type<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='keyword'>requires</span> <span class='curlybracket'>{</span> qp<span class='operator'>.</span><i >quantity-from-origin</i> @ q; <span class='curlybracket'>}</span>
</span></div></div></div></div></div><div id='qty.pt.arith.ops' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.7.12</a> Arithmetic operations <a class='abbr_ref' href='qty.pt.arith.ops.html'>[qty.pt.arith.ops]</a></h3><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.arith.ops.html#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6324'>#</a></div><div class='texpara'><div id='qty.pt.arith.ops-1.sentence-1' class='sentence'>In the following descriptions,
let <span class='texttt'>@</span> be the <span class='textsf'><i >operator</i></span><a class='hidden_link' href='#qty.pt.arith.ops-1.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:quantity,operator-____'><div id='lib:operator-,quantity____'><div id='lib:quantity_point,operator-'><div id='lib:operator-,quantity_point'><div id='lib:quantity,operator+____'><div id='lib:operator+,quantity____'><div id='lib:quantity_point,operator+'><div id='lib:operator+,quantity_point'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator+,quantity_point'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint_________________'><span class='texttt'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&amp;</span> qp, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint__________________'><span class='texttt'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> q, <span class='keyword'>const</span> QP<span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint___________________'><span class='texttt'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&amp;</span> qp, <span class='keyword'>const</span> quantity<span class='anglebracket'>&lt;</span>R2, Rep2<span class='anglebracket'>&gt;</span><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
</code></div></div></div></div></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.arith.ops.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6345'>#</a></div><div class='texpara'><div id='qty.pt.arith.ops-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-specialization-of</i><span class='anglebracket'>&lt;</span>PO, zeroth_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>quantity_point<span class='curlybracket'>{</span>qp<span class='operator'>.</span>quantity_ref_from<span class='parenthesis'>(</span>PO<span class='parenthesis'>)</span> @ q<span class='curlybracket'>}</span>;
<span class='keyword'>else</span>
<span class='keyword'>return</span> <span class='operator'>::</span>mp_units<span class='operator'>::</span>quantity_point<span class='curlybracket'>{</span>qp<span class='operator'>.</span>quantity_ref_from<span class='parenthesis'>(</span>PO<span class='parenthesis'>)</span> @ q, PO<span class='curlybracket'>}</span>;
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.arith.ops.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6355'>#</a></div><div class='texpara'><div id='qty.pt.arith.ops-3.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><a href='#concept:ReferenceOf' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:ReferenceOf__'><span class='tcode_in_codeblock'>ReferenceOf</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>R2<span class='parenthesis'>)</span>, PO<span class='operator'>.</span><i >quantity-spec</i><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='keyword'>requires</span> <span class='curlybracket'>{</span>
qp<span class='operator'>.</span>quantity_ref_from<span class='parenthesis'>(</span>PO<span class='parenthesis'>)</span> @ q;
<span class='curlybracket'>}</span>
</span></div></div></div></div><div class='texpara'><div id='lib:quantity_point,operator-_'><div id='lib:operator-,quantity_point_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator-,quantity_point_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf_____________________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>absolute_point_origin<span class='anglebracket'>&gt;</span> QP2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity________________________________________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> QP2<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.arith.ops.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6373'>#</a></div><div class='texpara'><div id='qty.pt.arith.ops-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> lhs<span class='operator'>.</span>quantity_ref_from<span class='parenthesis'>(</span>point_origin<span class='parenthesis'>)</span> <span class='operator'>-</span> rhs<span class='operator'>.</span>quantity_ref_from<span class='parenthesis'>(</span>QP2<span class='operator'>::</span>point_origin<span class='parenthesis'>)</span> <span class='operator'>+</span>
<span class='parenthesis'>(</span>lhs<span class='operator'>.</span>point_origin <span class='operator'>-</span> rhs<span class='operator'>.</span>point_origin<span class='parenthesis'>)</span>;
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.arith.ops.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6381'>#</a></div><div class='texpara'><div id='qty.pt.arith.ops-5.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='keyword'>requires</span> <span class='curlybracket'>{</span> lhs<span class='operator'>.</span>quantity_ref_from<span class='parenthesis'>(</span>point_origin<span class='parenthesis'>)</span> <span class='operator'>-</span> rhs<span class='operator'>.</span>quantity_ref_from<span class='parenthesis'>(</span>QP2<span class='operator'>::</span>point_origin<span class='parenthesis'>)</span>; <span class='curlybracket'>}</span>
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.arith.ops.html#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6388'>#</a></div><div class='texpara'><div id='qty.pt.arith.ops-6.sentence-1' class='sentence'><i >Recommended practice</i>: The subtraction of two equal origins is not evaluated<a class='hidden_link' href='#qty.pt.arith.ops-6.sentence-1'>.</a></div></div></div></div><div class='texpara'><div id='lib:PointOrigin,operator-'><div id='lib:operator-,PointOrigin'><div id='lib:quantity_point,operator-__'><div id='lib:operator-,quantity_point__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator-,quantity_point__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_____________________________________'><span class='texttt'>PointOrigin</span></span></a> PO2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity_________________________________________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&amp;</span> qp, PO2 po<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <a href='#concept:PointOrigin' title='5.7.2.2&emsp;Concepts&emsp;[qty.pt.orig.concepts]'><span id='conceptref:PointOrigin______________________________________'><span class='texttt'>PointOrigin</span></span></a> PO2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity__________________________________________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>-</span><span class='parenthesis'>(</span>PO2 po, <span class='keyword'>const</span> QP<span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.arith.ops.html#7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6405'>#</a></div><div class='texpara'><div id='qty.pt.arith.ops-7.sentence-1' class='sentence'><i >Effects</i>: For the first signature,
equivalent to:
<span class='codeblock'><span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>point_origin <span class='operator'>=</span><span class='operator'>=</span> po<span class='parenthesis'>)</span>
<span class='keyword'>return</span> qp<span class='operator'>.</span>quantity_ref_from<span class='parenthesis'>(</span>point_origin<span class='parenthesis'>)</span>;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'>&lt;</span>PO2,
<span class='operator'>::</span>mp_units<span class='operator'>::</span>absolute_point_origin<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
<span class='keyword'>return</span> qp<span class='operator'>.</span>quantity_ref_from<span class='parenthesis'>(</span>point_origin<span class='parenthesis'>)</span> <span class='operator'>+</span> <span class='parenthesis'>(</span>qp<span class='operator'>.</span>point_origin <span class='operator'>-</span> qp<span class='operator'>.</span>absolute_point_origin<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span> <span class='keyword'>else</span> <span class='curlybracket'>{</span>
<span class='keyword'>return</span> qp<span class='operator'>.</span>quantity_ref_from<span class='parenthesis'>(</span>point_origin<span class='parenthesis'>)</span> <span class='operator'>-</span>
po<span class='operator'>.</span><i >quantity-point</i><span class='operator'>.</span>quantity_ref_from<span class='parenthesis'>(</span>po<span class='operator'>.</span><i >quantity-point</i><span class='operator'>.</span>point_origin<span class='parenthesis'>)</span> <span class='operator'>+</span>
<span class='parenthesis'>(</span>qp<span class='operator'>.</span>point_origin <span class='operator'>-</span> po<span class='operator'>.</span><i >quantity-point</i><span class='operator'>.</span>point_origin<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>
</span></div> <div id='qty.pt.arith.ops-7.sentence-2' class='sentence'>
For the second signature,
equivalent to: <span class='texttt'><span class='keyword'>return</span> <span class='operator'>-</span><span class='parenthesis'>(</span>qp <span class='operator'>-</span> po<span class='parenthesis'>)</span>;</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.arith.ops.html#8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6424'>#</a></div><div class='texpara'><div id='qty.pt.arith.ops-8.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf______________________'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>quantity_point, PO2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<a href='#concept:ReferenceOf' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:ReferenceOf___'><span class='tcode_in_codeblock'>ReferenceOf</span></span></a><span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>reference<span class='parenthesis'>)</span><span class='parenthesis'>)</span>, PO2<span class='operator'>::</span><i >quantity-spec</i><span class='anglebracket'>&gt;</span>
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.arith.ops.html#9'>9</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6432'>#</a></div><div class='texpara'><div id='qty.pt.arith.ops-9.sentence-1' class='sentence'><i >Recommended practice</i>: The subtraction of two equal origins is not evaluated<a class='hidden_link' href='#qty.pt.arith.ops-9.sentence-1'>.</a></div></div></div></div></div><div id='qty.pt.cmp' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.7.13</a> Comparison <a class='abbr_ref' href='qty.pt.cmp.html'>[qty.pt.cmp]</a></h3><div class='texpara'><div id='lib:quantity_point,operator<=>'><div id='lib:operator<=>,quantity_point'><div id='lib:quantity_point,operator=='><div id='lib:operator==,quantity_point'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator==,quantity_point'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf_______________________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>absolute_point_origin<span class='anglebracket'>&gt;</span> QP2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> QP2<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'>&lt;</span>quantity_point<span class='anglebracket'>&gt;</span> QP, <a href='#concept:QuantityPointOf' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPointOf________________________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'>&lt;</span>absolute_point_origin<span class='anglebracket'>&gt;</span> QP2<span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<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> QP<span class='operator'>&amp;</span> lhs, <span class='keyword'>const</span> QP2<span class='operator'>&amp;</span> rhs<span class='parenthesis'>)</span>;
</code></div></div></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.cmp.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6451'>#</a></div><div class='texpara'><div id='qty.pt.cmp-1.sentence-1' class='sentence'>Let <span class='texttt'>@</span> be the <span class='textsf'><i >operator</i></span>, and
let <i >C</i> be
<span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>equality_<span class='shy'></span>comparable_<span class='shy'></span>with</span> if <span class='texttt'>@</span> is <span class='texttt'><span class='operator'>=</span><span class='operator'>=</span></span>, and
<span class='texttt'>std<span class='operator'>&#x200b;::&#x200b;</span>three_<span class='shy'></span>way_<span class='shy'></span>comparable_<span class='shy'></span>with</span> if <span class='texttt'>@</span> is <span class='texttt'><span class='anglebracket'>&lt;</span><span class='operator'>=</span><span class='anglebracket'>&gt;</span></span><a class='hidden_link' href='#qty.pt.cmp-1.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.cmp.html#2'>2</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6457'>#</a></div><div class='texpara'><div id='qty.pt.cmp-2.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> lhs <span class='operator'>-</span> lhs<span class='operator'>.</span>absolute_point_origin @ rhs <span class='operator'>-</span> rhs<span class='operator'>.</span>absolute_point_origin;
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.cmp.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6464'>#</a></div><div class='texpara'><div id='qty.pt.cmp-3.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><i >C</i><span class='anglebracket'>&lt;</span>quantity_type, <span class='keyword'>typename</span> QP2<span class='operator'>::</span>quantity_type<span class='anglebracket'>&gt;</span>
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.cmp.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6471'>#</a></div><div class='texpara'><div id='qty.pt.cmp-4.sentence-1' class='sentence'><i >Recommended practice</i>: If the origins are equal, instead evaluate
<span class='codeblock'>lhs<span class='operator'>.</span>quantity_ref_from<span class='parenthesis'>(</span>point_origin<span class='parenthesis'>)</span> @ rhs<span class='operator'>.</span>quantity_ref_from<span class='parenthesis'>(</span>QP2<span class='operator'>::</span>point_origin<span class='parenthesis'>)</span>
</span></div></div></div></div></div><div id='qty.point' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.7.14</a> Construction helper <span class='texttt'>point</span> <a class='abbr_ref' href='qty.point.html'>[qty.point]</a></h3><div class='texpara'><span id='lib:point_'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:point_'>🔗</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><a href='#concept:Reference' title='5.4.5&emsp;Concepts&emsp;[qty.ref.concepts]'><span id='conceptref:Reference______________________________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a> R<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> point_ <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdRep,
<a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf___________________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> Rep <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdRep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> quantity_point<span class='anglebracket'>&lt;</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, default_point_origin<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, Rep<span class='anglebracket'>&gt;</span> <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>FwdRep<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></div><div class='texpara'><div id='lib:point_,operator()'><div id='lib:operator(),point_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator(),point_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> FwdRep,
<a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf____________________________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span> Rep <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdRep<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> quantity_point<span class='anglebracket'>&lt;</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, default_point_origin<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, Rep<span class='anglebracket'>&gt;</span> <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>FwdRep<span class='operator'>&amp;</span><span class='operator'>&amp;</span> lhs<span class='parenthesis'>)</span> <span class='keyword'>const</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.point.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6503'>#</a></div><div class='texpara'><div id='qty.point-1.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> quantity_<span class='shy'></span>point<span class='curlybracket'>{</span>quantity<span class='curlybracket'>{</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>FwdRep<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>lhs<span class='parenthesis'>)</span>, R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='curlybracket'>}</span><span class='curlybracket'>}</span>;</span></div></div></div></div></div><div id='qty.pt.non.mem.conv' class='section'><h3 ><a class='secnum' style='min-width:80pt'>5.7.15</a> Non-member conversions <a class='abbr_ref' href='qty.pt.non.mem.conv.html'>[qty.pt.non.mem.conv]</a></h3><div class='texpara'><div id='lib:sudo-cast,quantity_point'><div id='lib:quantity_point,sudo-cast'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity_point,sudo-cast'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint____________________'><span class='texttt'>QuantityPoint</span></span></a> ToQP, <span class='keyword'>typename</span> FwdFromQP,
<a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint_____________________'><span class='texttt'>QuantityPoint</span></span></a> FromQP <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdFromQP<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint______________________'><span class='texttt'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> <span class='texttt'><i >sudo-cast</i></span><span class='parenthesis'>(</span>FwdFromQP<span class='operator'>&amp;</span><span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.non.mem.conv.html#1'>1</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6520'>#</a></div><div class='texpara'><div id='qty.pt.non.mem.conv-1.sentence-1' class='sentence'><i >Returns</i>: TBD<a class='hidden_link' href='#qty.pt.non.mem.conv-1.sentence-1'>.</a></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.non.mem.conv.html#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6525'>#</a></div><div class='texpara'><div id='qty.pt.non.mem.conv-2.sentence-1' class='sentence'><span class='texttt'>value_<span class='shy'></span>cast</span> is an explicit cast that allows truncation<a class='hidden_link' href='#qty.pt.non.mem.conv-2.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:quantity_point,value_cast'><div id='lib:value_cast,quantity_point'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:value_cast,quantity_point'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <span class='keyword'>typename</span> FwdQP, <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint_______________________'><span class='texttt'>QuantityPoint</span></span></a> QP <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQP<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>convertible<span class='parenthesis'>(</span>QP<span class='operator'>::</span>reference, ToU<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint________________________'><span class='texttt'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span>FwdQP<span class='operator'>&amp;</span><span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.non.mem.conv.html#3'>3</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6536'>#</a></div><div class='texpara'><div id='qty.pt.non.mem.conv-3.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> quantity_point<span class='curlybracket'>{</span>value_cast<span class='anglebracket'>&lt;</span>ToU<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>FwdQP<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>qp<span class='parenthesis'>)</span><span class='operator'>.</span><i >quantity-from-origin</i><span class='parenthesis'>)</span>,
QP<span class='operator'>::</span>point_origin<span class='curlybracket'>}</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:quantity_point,value_cast_'><div id='lib:value_cast,quantity_point_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:value_cast,quantity_point_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation___________________________________'><span class='texttt'>Representation</span></span></a> ToRep, <span class='keyword'>typename</span> FwdQP, <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint_________________________'><span class='texttt'>QuantityPoint</span></span></a> QP <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQP<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf_____________________________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>ToRep, QP<span class='operator'>::</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span>ToRep, <span class='keyword'>typename</span> QP<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> quantity_point<span class='anglebracket'>&lt;</span>QP<span class='operator'>::</span>reference, QP<span class='operator'>::</span>point_origin, ToRep<span class='anglebracket'>&gt;</span> value_cast<span class='parenthesis'>(</span>FwdQP<span class='operator'>&amp;</span><span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.non.mem.conv.html#4'>4</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6554'>#</a></div><div class='texpara'><div id='qty.pt.non.mem.conv-4.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> <span class='curlybracket'>{</span>value_cast<span class='anglebracket'>&lt;</span>ToRep<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>FwdQP<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>qp<span class='parenthesis'>)</span><span class='operator'>.</span><i >quantity-from-origin</i><span class='parenthesis'>)</span>, QP<span class='operator'>::</span>point_origin<span class='curlybracket'>}</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:quantity_point,value_cast__'><div id='lib:value_cast,quantity_point__'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:value_cast,quantity_point__'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation____________________________________'><span class='texttt'>Representation</span></span></a> ToRep, <span class='keyword'>typename</span> FwdQP,
<a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint__________________________'><span class='texttt'>QuantityPoint</span></span></a> QP <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQP<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint___________________________'><span class='texttt'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span>FwdQP<span class='operator'>&amp;</span><span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Representation' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:Representation_____________________________________'><span class='texttt'>Representation</span></span></a> ToRep, <a href='#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <span class='keyword'>typename</span> FwdQP,
<a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint____________________________'><span class='texttt'>QuantityPoint</span></span></a> QP <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQP<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint_____________________________'><span class='texttt'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span>FwdQP<span class='operator'>&amp;</span><span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.non.mem.conv.html#5'>5</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6575'>#</a></div><div class='texpara'><div id='qty.pt.non.mem.conv-5.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> quantity_point<span class='curlybracket'>{</span>value_cast<span class='anglebracket'>&lt;</span>ToU, ToRep<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>FwdQP<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>qp<span class='parenthesis'>)</span><span class='operator'>.</span><i >quantity-from-origin</i><span class='parenthesis'>)</span>,
QP<span class='operator'>::</span>point_origin<span class='curlybracket'>}</span>;
</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.non.mem.conv.html#6'>6</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6583'>#</a></div><div class='texpara'><div id='qty.pt.non.mem.conv-6.sentence-1' class='sentence'><i >Remarks</i>: The expression in the <span class='textsf'><i >requires-clause</i></span> is equivalent to:
<span class='codeblock'><span class='parenthesis'>(</span>convertible<span class='parenthesis'>(</span>QP<span class='operator'>::</span>reference, ToU<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <a href='#concept:RepresentationOf' title='5.5.4&emsp;Concepts&emsp;[qty.rep.concepts]'><span id='conceptref:RepresentationOf______________________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'>&lt;</span>ToRep, QP<span class='operator'>::</span>quantity_spec<span class='anglebracket'>&gt;</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span>ToRep, <span class='keyword'>typename</span> QP<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>
</span></div></div></div></div><div class='texpara'><div id='lib:quantity_point,value_cast___'><div id='lib:value_cast,quantity_point___'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:value_cast,quantity_point___'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:Quantity' title='5.6.3&emsp;Class template quantity&emsp;[qty.syn]'><span id='conceptref:Quantity___________________________________________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> ToQ, <span class='keyword'>typename</span> FwdQP, <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint______________________________'><span class='texttt'>QuantityPoint</span></span></a> QP <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQP<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>convertible<span class='parenthesis'>(</span>QP<span class='operator'>::</span>reference, ToQ<span class='operator'>::</span>unit<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span> <span class='parenthesis'>(</span>ToQ<span class='operator'>::</span>quantity_spec <span class='operator'>=</span><span class='operator'>=</span> QP<span class='operator'>::</span>quantity_spec<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> ToQ<span class='operator'>::</span>rep, <span class='keyword'>typename</span> QP<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint_______________________________'><span class='texttt'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span>FwdQP<span class='operator'>&amp;</span><span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.non.mem.conv.html#7'>7</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6601'>#</a></div><div class='texpara'><div id='qty.pt.non.mem.conv-7.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> quantity_point<span class='curlybracket'>{</span>value_cast<span class='anglebracket'>&lt;</span>ToQ<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>FwdQP<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>qp<span class='parenthesis'>)</span><span class='operator'>.</span><i >quantity-from-origin</i><span class='parenthesis'>)</span>,
QP<span class='operator'>::</span>point_origin<span class='curlybracket'>}</span>;
</span></div></div></div></div><div class='texpara'><div id='lib:quantity_point,value_cast____'><div id='lib:value_cast,quantity_point____'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:value_cast,quantity_point____'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint________________________________'><span class='texttt'>QuantityPoint</span></span></a> ToQP, <span class='keyword'>typename</span> FwdQP, <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint_________________________________'><span class='texttt'>QuantityPoint</span></span></a> QP <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQP<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>convertible<span class='parenthesis'>(</span>QP<span class='operator'>::</span>reference, ToQP<span class='operator'>::</span>unit<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span>ToQP<span class='operator'>::</span>quantity_spec <span class='operator'>=</span><span class='operator'>=</span> QP<span class='operator'>::</span>quantity_spec<span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
<span class='parenthesis'>(</span><span class='texttt'><i >same-absolute-point-origins</i></span><span class='parenthesis'>(</span>ToQP<span class='operator'>::</span>point_origin, QP<span class='operator'>::</span>point_origin<span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&amp;</span><span class='operator'>&amp;</span>
std<span class='operator'>::</span>constructible_from<span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> ToQP<span class='operator'>::</span>rep, <span class='keyword'>typename</span> QP<span class='operator'>::</span>rep<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint__________________________________'><span class='texttt'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> value_cast<span class='parenthesis'>(</span>FwdQP<span class='operator'>&amp;</span><span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.non.mem.conv.html#8'>8</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6621'>#</a></div><div class='texpara'><div id='qty.pt.non.mem.conv-8.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='texttt'><span class='keyword'>return</span> <span class='texttt'><i >sudo-cast</i></span><span class='anglebracket'>&lt;</span>ToQP<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>std<span class='operator'>&#x200b;::&#x200b;</span>forward<span class='anglebracket'>&lt;</span>FwdQP<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>qp<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;</span></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.non.mem.conv.html#9'>9</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6627'>#</a></div><div class='texpara'><div id='qty.pt.non.mem.conv-9.sentence-1' class='sentence'><span class='texttt'>quantity_<span class='shy'></span>cast</span> is an explicit cast that allows converting to more specific quantities<a class='hidden_link' href='#qty.pt.non.mem.conv-9.sentence-1'>.</a></div></div></div><div class='texpara'><div id='lib:quantity_point,quantity_cast'><div id='lib:quantity_cast,quantity_point'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:quantity_cast,quantity_point'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> ToQS, <span class='keyword'>typename</span> FwdQP, <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint___________________________________'><span class='texttt'>QuantityPoint</span></span></a> QP <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'>&lt;</span>FwdQP<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantitySpecCastableTo_'></a><span class='texttt'><i >QuantitySpecCastableTo</i></span><span class='anglebracket'>&lt;</span>QP<span class='operator'>::</span>quantity_spec, ToQS<span class='anglebracket'>&gt;</span>
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4&emsp;Class template quantity_&shy;point&emsp;[qty.pt.syn]'><span id='conceptref:QuantityPoint____________________________________'><span class='texttt'>QuantityPoint</span></span></a> <span class='keyword'>auto</span> quantity_cast<span class='parenthesis'>(</span>FwdQP<span class='operator'>&amp;</span><span class='operator'>&amp;</span> qp<span class='parenthesis'>)</span>;
</code></div></div></div></div><div class='para'><div class='marginalizedparent'><a class='marginalized' href='qty.pt.non.mem.conv.html#10'>10</a></div><div class='itemdescr'><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L6638'>#</a></div><div class='texpara'><div id='qty.pt.non.mem.conv-10.sentence-1' class='sentence'><i >Effects</i>: Equivalent to:
<span class='codeblock'><span class='keyword'>return</span> QP<span class='curlybracket'>{</span>quantity_cast<span class='anglebracket'>&lt;</span>ToQS<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'>&lt;</span>FwdQP<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>qp<span class='parenthesis'>)</span><span class='operator'>.</span><i >quantity_from_origin</i><span class='parenthesis'>)</span>,
QP<span class='operator'>::</span>point_origin<span class='curlybracket'>}</span>;
</span></div></div></div></div></div></div><div id='qty.systems' class='section'><h2 ><a class='secnum' style='min-width:65pt'>5.8</a> Systems <a class='abbr_ref' href='qty.systems.html'>[qty.systems]</a></h2></div><div id='qty.chrono' class='section'><h2 ><a class='secnum' style='min-width:65pt'>5.9</a> <span class='texttt'>std&#x200b;::&#x200b;chrono</span> interoperability <a class='abbr_ref' href='qty.chrono.html'>[qty.chrono]</a></h2><div class='texpara'><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Period<span class='anglebracket'>&gt;</span>
<span class='keyword'>consteval</span> <span class='keyword'>auto</span> <i >time-unit-from-chrono-period</i><span class='parenthesis'>(</span><span class='parenthesis'>)</span>
<span class='curlybracket'>{</span>
<span class='keyword'>using</span> <span class='keyword'>namespace</span> si;
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>is_same_v<span class='anglebracket'>&lt;</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>nanoseconds<span class='operator'>::</span>period<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> nano<span class='anglebracket'>&lt;</span>second<span class='anglebracket'>&gt;</span>;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>is_same_v<span class='anglebracket'>&lt;</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>microseconds<span class='operator'>::</span>period<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> micro<span class='anglebracket'>&lt;</span>second<span class='anglebracket'>&gt;</span>;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>is_same_v<span class='anglebracket'>&lt;</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>milliseconds<span class='operator'>::</span>period<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> milli<span class='anglebracket'>&lt;</span>second<span class='anglebracket'>&gt;</span>;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>is_same_v<span class='anglebracket'>&lt;</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>seconds<span class='operator'>::</span>period<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> second;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>is_same_v<span class='anglebracket'>&lt;</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>minutes<span class='operator'>::</span>period<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> minute;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>is_same_v<span class='anglebracket'>&lt;</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>hours<span class='operator'>::</span>period<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> hour;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>is_same_v<span class='anglebracket'>&lt;</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>days<span class='operator'>::</span>period<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> day;
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>is_same_v<span class='anglebracket'>&lt;</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>weeks<span class='operator'>::</span>period<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='keyword'>return</span> mag<span class='anglebracket'>&lt;</span><span class='literal'>7</span><span class='anglebracket'>&gt;</span> <span class='operator'>*</span> day;
<span class='keyword'>else</span>
<span class='keyword'>return</span> mag_ratio<span class='anglebracket'>&lt;</span>Period<span class='operator'>::</span>num, Period<span class='operator'>::</span>den<span class='anglebracket'>&gt;</span> <span class='operator'>*</span> second;
<span class='curlybracket'>}</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Rep, <span class='keyword'>typename</span> Period<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <a class='index' id='lib:quantity_like_traits,std::chrono::duration'></a>quantity_like_traits<span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'>&lt;</span>Rep, Period<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> reference <span class='operator'>=</span> <i >time-unit-from-chrono-period</i><span class='anglebracket'>&lt;</span>Period<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> explicit_import <span class='operator'>=</span> <span class='literal'>false</span>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> explicit_export <span class='operator'>=</span> <span class='literal'>false</span>;
<span class='keyword'>using</span> rep <span class='operator'>=</span> Rep;
<span class='keyword'>using</span> <i >T</i> <span class='operator'>=</span> std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'>&lt;</span>Rep, Period<span class='anglebracket'>&gt;</span>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> rep to_numerical_value<span class='parenthesis'>(</span><span class='keyword'>const</span> <i >T</i><span class='operator'>&amp;</span> q<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>
std<span class='operator'>::</span>is_nothrow_copy_constructible_v<span class='anglebracket'>&lt;</span>rep<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='curlybracket'>{</span>
<span class='keyword'>return</span> q<span class='operator'>.</span>count<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <i >T</i> from_numerical_value<span class='parenthesis'>(</span><span class='keyword'>const</span> rep<span class='operator'>&amp;</span> v<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>
std<span class='operator'>::</span>is_nothrow_copy_constructible_v<span class='anglebracket'>&lt;</span>rep<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='curlybracket'>{</span>
<span class='keyword'>return</span> <i >T</i><span class='parenthesis'>(</span>v<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Clock<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <span id='lib:chrono_point_origin_'><a class='hidden_link' href='#lib:chrono_point_origin_' title='5.9&emsp;std&#x200b;::&#x200b;chrono interoperability&emsp;[qty.chrono]'>chrono_point_origin_</a></span> <span class='keyword'>final</span> <span class='operator'>:</span> absolute_point_origin<span class='anglebracket'>&lt;</span>isq<span class='operator'>::</span>time<span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='keyword'>using</span> clock <span class='operator'>=</span> Clock;
<span class='curlybracket'>}</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Clock, <span class='keyword'>typename</span> Rep, <span class='keyword'>typename</span> Period<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <a class='index' id='lib:quantity_point_like_traits,std::chrono::time_point'></a>quantity_point_like_traits<span class='anglebracket'>&lt;</span>
std<span class='operator'>::</span>chrono<span class='operator'>::</span>time_point<span class='anglebracket'>&lt;</span>Clock, std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'>&lt;</span>Rep, Period<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span> <span class='curlybracket'>{</span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> reference <span class='operator'>=</span> <i >time-unit-from-chrono-period</i><span class='anglebracket'>&lt;</span>Period<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> point_origin <span class='operator'>=</span> chrono_point_origin<span class='anglebracket'>&lt;</span>Clock<span class='anglebracket'>&gt;</span>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> explicit_import <span class='operator'>=</span> <span class='literal'>false</span>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>bool</span> explicit_export <span class='operator'>=</span> <span class='literal'>false</span>;
<span class='keyword'>using</span> rep <span class='operator'>=</span> Rep;
<span class='keyword'>using</span> <i >T</i> <span class='operator'>=</span> std<span class='operator'>::</span>chrono<span class='operator'>::</span>time_point<span class='anglebracket'>&lt;</span>Clock, std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'>&lt;</span>Rep, Period<span class='anglebracket'>&gt;</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> rep to_numerical_value<span class='parenthesis'>(</span><span class='keyword'>const</span> <i >T</i><span class='operator'>&amp;</span> tp<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>
std<span class='operator'>::</span>is_nothrow_copy_constructible_v<span class='anglebracket'>&lt;</span>rep<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='curlybracket'>{</span>
<span class='keyword'>return</span> tp<span class='operator'>.</span>time_since_epoch<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='operator'>.</span>count<span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <i >T</i> from_numerical_value<span class='parenthesis'>(</span><span class='keyword'>const</span> rep<span class='operator'>&amp;</span> v<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span><span class='parenthesis'>(</span>
std<span class='operator'>::</span>is_nothrow_copy_constructible_v<span class='anglebracket'>&lt;</span>rep<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='curlybracket'>{</span>
<span class='keyword'>return</span> <i >T</i><span class='parenthesis'>(</span>std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'>&lt;</span>Rep, Period<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>v<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></div></div></div></div></body></html>