forked from mpusz/mp-units
3499 lines
1.2 MiB
Plaintext
3499 lines
1.2 MiB
Plaintext
<!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 Scope [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'>​::​</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 <a href='#spec.ext-note-1'>1</a></i>: <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'>​::​</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'>​::​</span>vector<span class='anglebracket'><</span>mp_<span class='shy'></span>units<span class='operator'>​::​</span><i >type</i><span class='anglebracket'>></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> — <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 Quantities and units library'>[quantities]</a>–<a href='#quantities' title='5 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 <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 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 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 Modules [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 <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 <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 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 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 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 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 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 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 std​::​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'>​::​</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 Utilities'>[qty.<span class='shy'></span>utils]</a>, utilities</span>
|
||
|
||
<span class='comment'>// <a href='#qty.sym.txt' title='5.3.3 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 Module mp_­units.core synopsis [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'><</span>std<span class='operator'>::</span>size_t N, std<span class='operator'>::</span>size_t M<span class='anglebracket'>></span>
|
||
<span class='keyword'>class</span> symbol_text;
|
||
|
||
<span class='comment'>// <a href='#qty.sym.expr' title='5.3.4 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 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'><</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'>></span>
|
||
<span class='keyword'>struct</span> per;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</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'>></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 Reference'>[qty.<span class='shy'></span>ref]</a>, reference</span>
|
||
|
||
<span class='comment'>// <a href='#qty.dim' title='5.4.2 Dimension'>[qty.<span class='shy'></span>dim]</a>, dimension</span>
|
||
|
||
<span class='comment'>// <a href='#qty.dim.concepts' title='5.4.2.2 Concepts'>[qty.<span class='shy'></span>dim.<span class='shy'></span>concepts]</a>, concepts</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> Dimension <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> D<span class='anglebracket'>></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 Types'>[qty.<span class='shy'></span>dim.<span class='shy'></span>types]</a>, types</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> base_dimension;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:SymbolicConstant'></a><i >SymbolicConstant</i><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> derived_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 Types [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 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 Concepts [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 Concepts [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'><</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 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension__'><span class='tcode_in_codeblock'>Dimension</span></span></a> D<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Den <span class='operator'>!</span><span class='operator'>=</span> <span class='literal'>0</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:Dimension' title='5.4.2.2 Concepts [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 Concepts [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 Concepts [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 Concepts [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 Concepts [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 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 Module mp_­units.core synopsis [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'><</span><span class='keyword'>typename</span> CharT <span class='operator'>=</span> <span class='keyword'>char</span>, std<span class='operator'>::</span>output_iterator<span class='anglebracket'><</span>CharT<span class='anglebracket'>></span> Out, <a href='#concept:Dimension' title='5.4.2.2 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension________'><span class='tcode_in_codeblock'>Dimension</span></span></a> D<span class='anglebracket'>></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'>&</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'><</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 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension_________'><span class='tcode_in_codeblock'>Dimension</span></span></a> D<span class='anglebracket'>></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 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 Concepts'>[qty.<span class='shy'></span>spec.<span class='shy'></span>concepts]</a>, concepts</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> QuantitySpec <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> QS<span class='anglebracket'>></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 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 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 Named [named.qty]'>is_kind</a></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> quantity_spec; <span class='comment'>// <i >not defined</i></span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</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'>></span>
|
||
<span class='keyword'>struct</span> quantity_spec<span class='anglebracket'><</span>Dim, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</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'>></span>
|
||
<span class='keyword'>struct</span> quantity_spec<span class='anglebracket'><</span>Eq, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</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'>></span>
|
||
<span class='keyword'>struct</span> quantity_spec<span class='anglebracket'><</span>QS, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</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'>></span>
|
||
<span class='keyword'>struct</span> quantity_spec<span class='anglebracket'><</span>QS, Eq, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span>;
|
||
|
||
<span class='comment'>// <a href='#derived.qty' title='5.4.3.3.2 Derived'>[derived.<span class='shy'></span>qty]</a>, derived</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:SymbolicConstant_'></a><i >SymbolicConstant</i><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> derived_quantity_spec;
|
||
|
||
<span class='comment'>// <a href='#dimless.qty' title='5.4.3.3.3 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 Base quantity of dimension one [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 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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Q<span class='anglebracket'>></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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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'>></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'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>Q<span class='parenthesis'>)</span><span class='anglebracket'>></span>; <span class='curlybracket'>}</span>
|
||
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> kind_of_<span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>Q<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span id='lib:kind_of'><a class='hidden_link' href='#lib:kind_of' title='5.2.2 Module mp_­units.core synopsis [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 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 Concepts [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 Concepts [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'><</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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec____'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Q<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Den <span class='operator'>!</span><span class='operator'>=</span> <span class='literal'>0</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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 Concepts [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 Concepts [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 Concepts [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 Concepts [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 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 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 Concepts [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 Concepts [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 Concepts [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 Concepts [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 Concepts [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 Concepts [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 Concepts [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 Concepts [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 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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Q<span class='anglebracket'>></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 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 Concepts [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 Concepts [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 Unit'>[qty.<span class='shy'></span>unit]</a>, unit</span>
|
||
|
||
<span class='comment'>// <a href='#qty.unit.mag' title='5.4.4.2 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 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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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 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'><</span>symbol_text Symbol, <span class='keyword'>long</span> <span class='keyword'>double</span> Value<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Value <span class='anglebracket'>></span> <span class='literal'>0</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>struct</span> mag_constant;
|
||
|
||
<span class='comment'>// <a href='#qty.unit.mag.ops' title='5.4.4.2.4 Operations'>[qty.<span class='shy'></span>unit.<span class='shy'></span>mag.<span class='shy'></span>ops]</a>, operations</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:MagArg'></a><i >MagArg</i> <span class='keyword'>auto</span> V<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude'><span class='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'><</span>std<span class='operator'>::</span>intmax_t N, std<span class='operator'>::</span>intmax_t D<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>N <span class='anglebracket'>></span> <span class='literal'>0</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_'><span class='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'><</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'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude__'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> 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 Module mp_­units.core synopsis [mp.units.core.syn]'>pi</a></span> <span class='keyword'>final</span> <span class='operator'>:</span>
|
||
mag_constant<span class='anglebracket'><</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'><</span><span class='keyword'>long</span> <span class='keyword'>double</span><span class='anglebracket'>></span><span class='anglebracket'>></span> <span class='curlybracket'>{</span>
|
||
<span class='curlybracket'>}</span> <span id='lib:pi_'><a class='hidden_link' href='#lib:pi' title='5.2.2 Module mp_­units.core synopsis [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 Traits'>[qty.<span class='shy'></span>unit.<span class='shy'></span>traits]</a>, traits</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> space_before_unit_symbol <span class='operator'>=</span> <span class='literal'>true</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='anglebracket'>></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'><</span>one<span class='anglebracket'>></span> <span class='operator'>=</span> <span class='literal'>false</span>;
|
||
|
||
<span class='comment'>// <a href='#qty.unit.concepts' title='5.4.4.4 Concepts'>[qty.<span class='shy'></span>unit.<span class='shy'></span>concepts]</a>, concepts</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> Unit <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> U, <span class='keyword'>auto</span> QS<span class='anglebracket'>></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 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 Scaled'>[qty.<span class='shy'></span>scaled.<span class='shy'></span>unit]</a>, scaled</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude___'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> M, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <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 Named'>[qty.<span class='shy'></span>named.<span class='shy'></span>unit]</a>, named</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> named_unit; <span class='comment'>// <i >not defined</i></span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a class='index' id='conceptref:QuantityKindSpec'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, QS<span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a class='index' id='conceptref:QuantityKindSpec_'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS, <a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> PO<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, QS, PO<span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol<span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, U<span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> U, <a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> PO<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, U, PO<span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> U, <a class='index' id='conceptref:QuantityKindSpec__'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, U, QS<span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit_'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> U, <a class='index' id='conceptref:QuantityKindSpec___'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS,
|
||
<a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin__'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> PO<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, U, QS, PO<span class='anglebracket'>></span>;
|
||
|
||
<span class='comment'>// <a href='#qty.prefixed.unit' title='5.4.4.5.4 Prefixed'>[qty.<span class='shy'></span>prefixed.<span class='shy'></span>unit]</a>, prefixed</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude____'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> M, <a href='#concept:PrefixableUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:PrefixableUnit'><span class='tcode_in_codeblock'>PrefixableUnit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <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 Common'>[qty.<span class='shy'></span>common.<span class='shy'></span>unit]</a>, common</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____'><span class='tcode_in_codeblock'>Unit</span></span></a> U1, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____'><span class='tcode_in_codeblock'>Unit</span></span></a> U2, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______'><span class='tcode_in_codeblock'>Unit</span></span></a><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Rest<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> common_unit;
|
||
|
||
<span class='comment'>// <a href='#qty.derived.unit' title='5.4.4.5.6 Derived'>[qty.<span class='shy'></span>derived.<span class='shy'></span>unit]</a>, derived</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:SymbolicConstant__'></a><i >SymbolicConstant</i><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> derived_unit;
|
||
|
||
<span class='comment'>// <a href='#qty.unit.one' title='5.4.4.5.7 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 One [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 Module mp_­units.core synopsis [mp.units.core.syn]'>percent</a></span> <span class='keyword'>final</span> <span class='operator'>:</span> named_unit<span class='anglebracket'><</span><span class='literal'>"%"</span>, mag_ratio<span class='anglebracket'><</span><span class='literal'>1</span>, <span class='literal'>100</span><span class='anglebracket'>></span> <span class='operator'>*</span> one<span class='anglebracket'>></span> <span class='curlybracket'>{</span>
|
||
<span class='curlybracket'>}</span> <span id='lib:percent_'><a class='hidden_link' href='#lib:percent' title='5.2.2 Module mp_­units.core synopsis [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 Module mp_­units.core synopsis [mp.units.core.syn]'>per_mille</a></span> <span class='keyword'>final</span> <span class='operator'>:</span>
|
||
named_unit<span class='anglebracket'><</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'><</span><span class='literal'>1</span>, <span class='literal'>1000</span><span class='anglebracket'>></span> <span class='operator'>*</span> one<span class='anglebracket'>></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 Module mp_­units.core synopsis [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 Module mp_­units.core synopsis [mp.units.core.syn]'>parts_per_million</a></span> <span class='keyword'>final</span> <span class='operator'>:</span>
|
||
named_unit<span class='anglebracket'><</span><span class='literal'>"ppm"</span>, mag_ratio<span class='anglebracket'><</span><span class='literal'>1</span>, <span class='literal'>1'000'000</span><span class='anglebracket'>></span> <span class='operator'>*</span> one<span class='anglebracket'>></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 Module mp_­units.core synopsis [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 Module mp_­units.core synopsis [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 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 Concepts [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 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>intmax_t Num, std<span class='operator'>::</span>intmax_t Den <span class='operator'>=</span> <span class='literal'>1</span>, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>></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 Concepts [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 Concepts [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 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________'><span class='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 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________'><span class='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 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________'><span class='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 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
|
||
<span class='comment'>// <a href='#qty.unit.cmp' title='5.4.4.7 Comparison'>[qty.<span class='shy'></span>unit.<span class='shy'></span>cmp]</a>, comparison</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________'><span class='tcode_in_codeblock'>Unit</span></span></a> From, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________'><span class='tcode_in_codeblock'>Unit</span></span></a> To<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> convertible<span class='parenthesis'>(</span>From from, To to<span class='parenthesis'>)</span>;
|
||
|
||
<span class='comment'>// <a href='#qty.unit.obs' title='5.4.4.8 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 Concepts [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 Concepts [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 Concepts [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 Concepts [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 Concepts [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 Concepts [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 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 Module mp_­units.core synopsis [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 Module mp_­units.core synopsis [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 Module mp_­units.core synopsis [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'><</span><span class='keyword'>typename</span> CharT <span class='operator'>=</span> <span class='keyword'>char</span>, std<span class='operator'>::</span>output_iterator<span class='anglebracket'><</span>CharT<span class='anglebracket'>></span> Out, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> Out unit_symbol_to<span class='parenthesis'>(</span>Out out, U u, <span class='keyword'>const</span> unit_symbol_formatting<span class='operator'>&</span> fmt <span class='operator'>=</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>unit_symbol_formatting fmt <span class='operator'>=</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>, <span class='keyword'>typename</span> CharT <span class='operator'>=</span> <span class='keyword'>char</span>, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> std<span class='operator'>::</span>string_view unit_symbol<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span>;
|
||
|
||
<span class='comment'>// <a href='#qty.ref.concepts' title='5.4.5 Concepts'>[qty.<span class='shy'></span>ref.<span class='shy'></span>concepts]</a>, concepts</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:Reference' title='5.4.5 Concepts [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'><</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> QS<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:ReferenceOf' title='5.4.5 Concepts [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 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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> reference;
|
||
|
||
<span class='comment'>// <a href='#qty.ref.ops' title='5.4.7 Operations'>[qty.<span class='shy'></span>ref.<span class='shy'></span>ops]</a>, operations</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> FwdRep, <a href='#concept:Reference' title='5.4.5 Concepts [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 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></span> Rep <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdRep<span class='anglebracket'>></span><span class='anglebracket'>></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'><</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'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>constexpr</span> quantity<span class='anglebracket'><</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rep<span class='anglebracket'>></span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>FwdRep<span class='operator'>&</span><span class='operator'>&</span> lhs, R r<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> FwdRep, <a href='#concept:Reference' title='5.4.5 Concepts [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 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf_'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></span> Rep <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdRep<span class='anglebracket'>></span><span class='anglebracket'>></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'><</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'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span><span class='operator'>&</span> lhs, R<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:Reference' title='5.4.5 Concepts [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 Class template quantity [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'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span><span class='operator'>&</span> q, R<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:Reference' title='5.4.5 Concepts [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 Class template quantity [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'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span><span class='operator'>&</span> q, R<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Reference' title='5.4.5 Concepts [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'>></span>
|
||
<span class='keyword'>requires</span> <a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf__'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>Rep<span class='anglebracket'>></span>, get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></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'>&</span><span class='operator'>&</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Reference' title='5.4.5 Concepts [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'>></span>
|
||
<span class='keyword'>requires</span> <a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf___'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>Rep<span class='anglebracket'>></span>, get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></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'>&</span><span class='operator'>&</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Reference' title='5.4.5 Concepts [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'>></span>
|
||
<span class='keyword'>requires</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity_____'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'><</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>Q<span class='anglebracket'>></span><span class='anglebracket'>></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'>&</span><span class='operator'>&</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Reference' title='5.4.5 Concepts [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'>></span>
|
||
<span class='keyword'>requires</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity______'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'><</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>Q<span class='anglebracket'>></span><span class='anglebracket'>></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'>&</span><span class='operator'>&</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 Observers'>[qty.<span class='shy'></span>ref.<span class='shy'></span>obs]</a>, observers</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Q, <span class='keyword'>typename</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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'><</span>Q, U<span class='anglebracket'>></span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Q, <span class='keyword'>typename</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> get_unit<span class='parenthesis'>(</span>reference<span class='anglebracket'><</span>Q, U<span class='anglebracket'>></span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>consteval</span> <a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit____'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> get_common_reference<span class='parenthesis'>(</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit_____'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> u1,
|
||
<a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit______'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> u2,
|
||
<a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit_______'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span><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'><</span><a href='#concept:Reference' title='5.4.5 Concepts [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 Concepts [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 Concepts [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'>></span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:Reference' title='5.4.5 Concepts [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 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 Module mp_­units.core synopsis [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 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 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'><</span><span class='keyword'>typename</span> Rep<span class='anglebracket'>></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 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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span><span class='anglebracket'>></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'><</span><span class='keyword'>bool</span><span class='anglebracket'>></span> <span class='operator'>=</span> <span class='literal'>true</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span>std<span class='operator'>::</span>complex<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='anglebracket'>></span> <span class='operator'>=</span> <span class='literal'>true</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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 Values'>[qty.<span class='shy'></span>val.<span class='shy'></span>traits]</a>, values</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Rep<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> representation_values;
|
||
|
||
<span class='comment'>// <a href='#qty.rep.cpos' title='5.5.3 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 Concepts'>[qty.<span class='shy'></span>rep.<span class='shy'></span>concepts]</a>, concepts</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> Representation <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T, quantity_character Ch<span class='anglebracket'>></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 Quantity'>[qty]</a>, quantity</span>
|
||
|
||
<span class='comment'>// <a href='#qty.like' title='5.6.2 Interoperability'>[qty.<span class='shy'></span>like]</a>, interoperability</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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 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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> Q, <span class='keyword'>auto</span> QS<span class='anglebracket'>></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'><</span><a href='#concept:Reference' title='5.4.5 Concepts [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 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf____'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='anglebracket'>></span> Rep <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>class</span> quantity;
|
||
|
||
<span class='comment'>// <a href='#qty.delta' title='5.6.14 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'><</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference_____________'><span class='tcode_in_codeblock'>Reference</span></span></a> R<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> delta_;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Reference' title='5.4.5 Concepts [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'>></span>
|
||
<span class='keyword'>constexpr</span> delta_<span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span id='lib:delta'><a class='hidden_link' href='#lib:delta' title='5.2.2 Module mp_­units.core synopsis [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 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'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <i ><span class='texttt'>see below</span></i><span class='anglebracket'>></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 Class template quantity [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'><</span><a href='#concept:Representation' title='5.5.4 Concepts [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'>></span>
|
||
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
|
||
<span class='keyword'>constexpr</span> quantity<span class='anglebracket'><</span><i ><span class='texttt'>see below</span></i>, ToRep<span class='anglebracket'>></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'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <a href='#concept:Representation' title='5.5.4 Concepts [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'>></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 Class template quantity [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'><</span><a href='#concept:Representation' title='5.5.4 Concepts [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 Concepts [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'>></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 Class template quantity [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'><</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>></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 Class template quantity [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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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'>></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 Class template quantity [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 std​::​common_­type specializations'>[qty.<span class='shy'></span>common.<span class='shy'></span>type]</a>, <span class='tcode_in_codeblock'>std​::​common_<span class='shy'></span>type</span> specializations</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>mp_units<span class='operator'>::</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [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 Class template quantity [qty.syn]'><span id='conceptref:Quantity______________'><span class='tcode_in_codeblock'>Quantity</span></span></a> Q2<span class='anglebracket'>></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'><</span>Q1, Q2<span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>mp_units<span class='operator'>::</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [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 Concepts [qty.rep.concepts]'><span id='conceptref:Representation___'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>></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'><</span>Q, Value<span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>mp_units<span class='operator'>::</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [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 Concepts [qty.rep.concepts]'><span id='conceptref:Representation____'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>></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'><</span>Q, Value<span class='anglebracket'>></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'><</span>Value, Q<span class='anglebracket'>></span> <span class='operator'>:</span> std<span class='operator'>::</span>common_type<span class='anglebracket'><</span>Q, Value<span class='anglebracket'>></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 Quantity point'>[qty.<span class='shy'></span>pt]</a>, quantity point</span>
|
||
|
||
<span class='comment'>// <a href='#qty.pt.orig' title='5.7.2 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 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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> QS<span class='anglebracket'>></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 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 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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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'>></span>
|
||
<span class='keyword'>struct</span> absolute_point_origin;
|
||
|
||
<span class='comment'>// <a href='#qty.rel.pt.orig' title='5.7.2.3.2 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'><</span><a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'>></span>
|
||
<span class='keyword'>struct</span> relative_point_origin;
|
||
|
||
<span class='comment'>// <a href='#qty.zeroth.pt.orig' title='5.7.2.3.3 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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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'>></span>
|
||
<span class='keyword'>struct</span> zeroth_point_origin_;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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'>></span>
|
||
<span class='keyword'>constexpr</span> zeroth_point_origin_<span class='anglebracket'><</span>QS<span class='anglebracket'>></span> <span id='lib:zeroth_point_origin'><a class='hidden_link' href='#lib:zeroth_point_origin' title='5.2.2 Module mp_­units.core synopsis [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 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'><</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference_______________'><span class='tcode_in_codeblock'>Reference</span></span></a> R<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:PointOriginFor' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOriginFor'><span class='tcode_in_codeblock'>PointOriginFor</span></span></a><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></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 Interoperability'>[qty.<span class='shy'></span>pt.<span class='shy'></span>like]</a>, interoperability</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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 Class template quantity_­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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> QP, <span class='keyword'>auto</span> V<span class='anglebracket'>></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'><</span><a href='#concept:Reference' title='5.4.5 Concepts [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 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOriginFor_'><span class='tcode_in_codeblock'>PointOriginFor</span></span></a><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='anglebracket'>></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 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf_____'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='anglebracket'>></span> Rep <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>class</span> quantity_point;
|
||
|
||
<span class='comment'>// <a href='#qty.point' title='5.7.14 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'><</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference_________________'><span class='tcode_in_codeblock'>Reference</span></span></a> R<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> point_;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Reference' title='5.4.5 Concepts [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'>></span>
|
||
<span class='keyword'>constexpr</span> point_<span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span id='lib:point'><a class='hidden_link' href='#lib:point' title='5.7.14 Construction helper point [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 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'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <i ><span class='texttt'>see below</span></i><span class='anglebracket'>></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 Class template quantity_­point [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'><</span><a href='#concept:Representation' title='5.5.4 Concepts [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'>></span>
|
||
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>
|
||
<span class='keyword'>constexpr</span> quantity_point<span class='anglebracket'><</span><i ><span class='texttt'>see below</span></i>, <i ><span class='texttt'>see below</span></i>, ToRep<span class='anglebracket'>></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'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <a href='#concept:Representation' title='5.5.4 Concepts [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'>></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 Class template quantity_­point [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'><</span><a href='#concept:Representation' title='5.5.4 Concepts [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 Concepts [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'>></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 Class template quantity_­point [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'><</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>></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 Class template quantity_­point [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'><</span><a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'>></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 Class template quantity_­point [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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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'>></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 Class template quantity_­point [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 std​::​chrono interoperability'>[qty.<span class='shy'></span>chrono]</a>, <span class='tcode_in_codeblock'>std​::​chrono</span> interoperability</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Rep, <span class='keyword'>typename</span> Period<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> quantity_like_traits<span class='anglebracket'><</span>std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'><</span>Rep, Period<span class='anglebracket'>></span><span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Clock<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> chrono_point_origin_;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Clock<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> chrono_point_origin_<span class='anglebracket'><</span>Clock<span class='anglebracket'>></span> <span id='lib:chrono_point_origin'><a class='hidden_link' href='#lib:chrono_point_origin' title='5.2.3 Module mp_­units.systems synopsis [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'><</span><span class='keyword'>typename</span> Clock, <span class='keyword'>typename</span> Rep, <span class='keyword'>typename</span> Period<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> quantity_point_like_traits<span class='anglebracket'><</span>
|
||
std<span class='operator'>::</span>chrono<span class='operator'>::</span>time_point<span class='anglebracket'><</span>Clock, std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'><</span>Rep, Period<span class='anglebracket'>></span><span class='anglebracket'>></span><span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T, <span class='keyword'>template</span><span class='anglebracket'><</span><i ><span class='texttt'>see below</span></i><span class='anglebracket'>></span> <span class='keyword'>typename</span> U<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T, <span class='keyword'>template</span><span class='anglebracket'><</span><i ><span class='texttt'>see below</span></i><span class='anglebracket'>></span> <span class='keyword'>typename</span> U<span class='anglebracket'>></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'><</span><span class='operator'>=</span><span class='anglebracket'>></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'><</span><span class='operator'>=</span><span class='anglebracket'>></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'>​::​</span>ratio<span class='anglebracket'><</span>N, D<span class='anglebracket'>></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'>​::​</span>ratio<span class='anglebracket'><</span>N, D<span class='anglebracket'>></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'>​::​</span>num <span class='operator'>&</span><span class='operator'>&</span> den <span class='operator'>=</span><span class='operator'>=</span> R<span class='operator'>​::​</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'>​::​</span>ratio_<span class='shy'></span>multiply<span class='anglebracket'><</span>R<span class='parenthesis'>(</span>lhs<span class='parenthesis'>)</span>, R<span class='parenthesis'>(</span>rhs<span class='parenthesis'>)</span><span class='anglebracket'>></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'>​::​</span>num, Res<span class='operator'>​::​</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'><</span>std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'><</span><span class='keyword'>int</span>, R<span class='parenthesis'>(</span>r1<span class='parenthesis'>)</span><span class='anglebracket'>></span>,
|
||
std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'><</span><span class='keyword'>int</span>, R<span class='parenthesis'>(</span>r2<span class='parenthesis'>)</span><span class='anglebracket'>></span><span class='anglebracket'>></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'>​::​</span>num, Res<span class='operator'>​::​</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'><</span>std<span class='operator'>::</span>size_t N, std<span class='operator'>::</span>size_t M<span class='anglebracket'>></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'><</span>N<span class='anglebracket'>></span> <i >utf8</i>; <span class='comment'>// <i >exposition only</i></span>
|
||
std<span class='operator'>::</span>fixed_string<span class='anglebracket'><</span>M<span class='anglebracket'>></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'>&</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'><</span>N<span class='anglebracket'>></span><span class='operator'>&</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'>&</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'>&</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'><</span>N<span class='anglebracket'>></span><span class='operator'>&</span> utf8,
|
||
<span class='keyword'>const</span> std<span class='operator'>::</span>fixed_string<span class='anglebracket'><</span>M<span class='anglebracket'>></span><span class='operator'>&</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'>&</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'>&</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'><</span>std<span class='operator'>::</span>size_t N2, std<span class='operator'>::</span>size_t M2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> symbol_text<span class='anglebracket'><</span>N <span class='operator'>+</span> N2, M <span class='operator'>+</span> M2<span class='anglebracket'>></span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='keyword'>const</span> symbol_text<span class='operator'>&</span> lhs,
|
||
<span class='keyword'>const</span> symbol_text<span class='anglebracket'><</span>N2, M2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='comment'>// comparison</span>
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>size_t N2, std<span class='operator'>::</span>size_t M2<span class='anglebracket'>></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'>&</span> lhs,
|
||
<span class='keyword'>const</span> symbol_text<span class='anglebracket'><</span>N2, M2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>size_t N2, std<span class='operator'>::</span>size_t M2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='anglebracket'><</span><span class='operator'>=</span><span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='keyword'>const</span> symbol_text<span class='operator'>&</span> lhs,
|
||
<span class='keyword'>const</span> symbol_text<span class='anglebracket'><</span>N2, M2<span class='anglebracket'>></span><span class='operator'>&</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'>></span> symbol_text<span class='anglebracket'><</span><span class='literal'>1</span>, <span class='literal'>1</span><span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>size_t N<span class='anglebracket'>></span>
|
||
symbol_text<span class='parenthesis'>(</span><span class='keyword'>const</span> <span class='keyword'>char</span> <span class='parenthesis'>(</span><span class='operator'>&</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'>></span> symbol_text<span class='anglebracket'><</span>N <span class='operator'>-</span> <span class='literal'>1</span>, N <span class='operator'>-</span> <span class='literal'>1</span><span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>size_t N<span class='anglebracket'>></span>
|
||
symbol_text<span class='parenthesis'>(</span><span class='keyword'>const</span> std<span class='operator'>::</span>fixed_string<span class='anglebracket'><</span>N<span class='anglebracket'>></span><span class='operator'>&</span><span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>></span> symbol_text<span class='anglebracket'><</span>N, N<span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>size_t N, std<span class='operator'>::</span>size_t M<span class='anglebracket'>></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'>&</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'>&</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'>></span> symbol_text<span class='anglebracket'><</span>N <span class='operator'>-</span> <span class='literal'>1</span>, M <span class='operator'>-</span> <span class='literal'>1</span><span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>size_t N, std<span class='operator'>::</span>size_t M<span class='anglebracket'>></span>
|
||
symbol_text<span class='parenthesis'>(</span><span class='keyword'>const</span> std<span class='operator'>::</span>fixed_u8string<span class='anglebracket'><</span>N<span class='anglebracket'>></span><span class='operator'>&</span>, <span class='keyword'>const</span> std<span class='operator'>::</span>fixed_string<span class='anglebracket'><</span>M<span class='anglebracket'>></span><span class='operator'>&</span><span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>></span> symbol_text<span class='anglebracket'><</span>N, M<span class='anglebracket'>></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'><</span>N, M<span class='anglebracket'>></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'>&</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'>&</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'><</span>N<span class='anglebracket'>></span><span class='operator'>&</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'>&</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'>&</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'><</span>N<span class='anglebracket'>></span><span class='operator'>&</span> utf8, <span class='keyword'>const</span> std<span class='operator'>::</span>fixed_string<span class='anglebracket'><</span>M<span class='anglebracket'>></span><span class='operator'>&</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'><</span>std<span class='operator'>::</span>fixed_u8string<span class='anglebracket'><</span>N<span class='anglebracket'>></span><span class='anglebracket'>></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'><</span>std<span class='operator'>::</span>size_t N2, std<span class='operator'>::</span>size_t M2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> symbol_text<span class='anglebracket'><</span>N <span class='operator'>+</span> N2, M <span class='operator'>+</span> M2<span class='anglebracket'>></span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span><span class='keyword'>const</span> symbol_text<span class='operator'>&</span> lhs,
|
||
<span class='keyword'>const</span> symbol_text<span class='anglebracket'><</span>N2, M2<span class='anglebracket'>></span><span class='operator'>&</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'><</span>N <span class='operator'>+</span> N2, M <span class='operator'>+</span> M2<span class='anglebracket'>></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'><</span>std<span class='operator'>::</span>size_t N2, std<span class='operator'>::</span>size_t M2<span class='anglebracket'>></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'>&</span> lhs,
|
||
<span class='keyword'>const</span> symbol_text<span class='anglebracket'><</span>N2, M2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span> <span class='keyword'>noexcept</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>size_t N2, std<span class='operator'>::</span>size_t M2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='anglebracket'><</span><span class='operator'>=</span><span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='keyword'>const</span> symbol_text<span class='operator'>&</span> lhs,
|
||
<span class='keyword'>const</span> symbol_text<span class='anglebracket'><</span>N2, M2<span class='anglebracket'>></span><span class='operator'>&</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 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 <a href='#qty.sym.expr.general-example-1'>1</a></i>: <span class='codeblock'><span class='keyword'>using</span> <span class='keyword'>namespace</span> si<span class='operator'>::</span>unit_symbols;
|
||
<span class='keyword'>int</span> x <span class='operator'>=</span> 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<si​::​kilo_<span class='shy'></span><si​::​gram>, si​::​kilo_<span class='shy'></span><si​::​metre>, per<power<non_<span class='shy'></span>si​::​hour, 2>>></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> — <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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> std<span class='operator'>::</span>is_final_v<span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> std<span class='operator'>::</span>is_trivially_default_constructible_v<span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
std<span class='operator'>::</span>is_trivially_copy_constructible_v<span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> std<span class='operator'>::</span>is_trivially_move_constructible_v<span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
std<span class='operator'>::</span>is_trivially_destructible_v<span class='anglebracket'><</span>T<span class='anglebracket'>></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 Concept SymbolicConstant [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'><</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'>></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'><</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'>></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 <a href='#qty.sym.expr.types-note-1'>1</a></i>: <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> — <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'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span>r <span class='anglebracket'>></span> <i >ratio</i><span class='curlybracket'>{</span><span class='literal'>0</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span>T<span class='anglebracket'>></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'><</span>U, Ints<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T, <span class='keyword'>typename</span> U<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> Lhs, <span class='keyword'>typename</span> Rhs<span class='anglebracket'>></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'><</span><i >is-specialization-of</i><span class='anglebracket'><</span>Rhs, power<span class='anglebracket'>></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'><</span><i >expr-type</i><span class='anglebracket'><</span>Lhs<span class='anglebracket'>></span>, <i >expr-type</i><span class='anglebracket'><</span>Rhs<span class='anglebracket'>></span><span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='anglebracket'>></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'><</span><span class='keyword'>typename</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Ts<span class='anglebracket'>></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'><</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'>></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'><</span>OneType, Ts<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span>, per<span class='anglebracket'><</span>Us<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span><span class='anglebracket'>></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'>​::​</span><span class='texttt'><i >num</i></span></span> denotes <span class='texttt'><span class='texttt'><i >type-list</i></span><span class='anglebracket'><</span>Ts<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></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'>​::​</span><span class='texttt'><i >den</i></span></span> denotes <span class='texttt'><span class='texttt'><i >type-list</i></span><span class='anglebracket'><</span>Us<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></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'><</span>OneType, Ts<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></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'>​::​</span><span class='texttt'><i >num</i></span></span> denotes <span class='texttt'><span class='texttt'><i >type-list</i></span><span class='anglebracket'><</span>Ts<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></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'>​::​</span><span class='texttt'><i >den</i></span></span> denotes <span class='texttt'><span class='texttt'><i >type-list</i></span><span class='anglebracket'><</span><span class='anglebracket'>></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 Concept SymbolicConstant [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 <a href='#qty.sym.expr.algos-example-1'>1</a></i>: <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> — <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'><</span><span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span> <span class='keyword'>typename</span> To, <span class='keyword'>typename</span> OneType,
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span>, <span class='keyword'>typename</span><span class='anglebracket'>></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'>></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'><</span><span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span> <span class='keyword'>typename</span> To, <span class='keyword'>typename</span> OneType,
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span>, <span class='keyword'>typename</span><span class='anglebracket'>></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'>></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'><</span><span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span> <span class='keyword'>typename</span> To, <span class='keyword'>typename</span> OneType, <span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</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'><</span><span class='keyword'>typename</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span> <span class='keyword'>typename</span> To,
|
||
<span class='keyword'>typename</span> OneType, <span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span>, <span class='keyword'>typename</span><span class='anglebracket'>></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'>></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'>​::​</span>bool_<span class='shy'></span>constant<span class='anglebracket'><</span>B<span class='anglebracket'>></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'><</span>T, U<span class='anglebracket'>></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'><</span>F, Num<span class='anglebracket'>></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'><</span>F, Num, Den<span class='anglebracket'>></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 <a href='#qty.sym.expr.algos-example-2'>2</a></i>: <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'><</span>si<span class='operator'>​::​</span>kilo_<span class='shy'></span><span class='anglebracket'><</span>si<span class='operator'>​::​</span>metre<span class='anglebracket'>></span>, per<span class='anglebracket'><</span>power<span class='anglebracket'><</span>non_<span class='shy'></span>si<span class='operator'>​::​</span>hour, <span class='literal'>2</span><span class='anglebracket'>></span><span class='anglebracket'>></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> ×<span class='texttt'>per<span class='anglebracket'><</span>power<span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>h<span class='parenthesis'>)</span>, <span class='literal'>2</span><span class='anglebracket'>></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'><</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'>></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> — <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 <a href='#qty.sym.expr.algos-example-3'>3</a></i>: <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> — <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'><</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'>></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'><</span><span class='math'><span class='mathalpha'>x</span></span>, <span class='math'><span class='mathalpha'>n</span></span><span class='anglebracket'>></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'><</span><span class='math'><span class='mathalpha'>x</span></span><span class='anglebracket'>></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'><</span><span class='math'><span class='mathalpha'>r</span></span><span class='anglebracket'>></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'>​::​</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'><</span><span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span><span class='anglebracket'>></span> <span class='keyword'>typename</span> Proj, <span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span> <span class='keyword'>typename</span> To, <span class='keyword'>typename</span> OneType,
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span>, <span class='keyword'>typename</span><span class='anglebracket'>></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'>></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'><</span>U<span class='anglebracket'>></span></span> be
|
||
<span class='texttt'>power<span class='anglebracket'><</span>Proj<span class='anglebracket'><</span>F<span class='anglebracket'>></span>, Ints<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span></span> if <span class='texttt'>U</span> is of the form <span class='texttt'>power<span class='anglebracket'><</span>F, Ints<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span></span>, and
|
||
<span class='texttt'>Proj<span class='anglebracket'><</span>U<span class='anglebracket'>></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'><</span>Ints<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></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'><</span>F, Ints<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></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'>​::​</span><span class='texttt'><i >nums</i></span></span> and <span class='texttt'>T<span class='operator'>​::​</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'><</span>Nums<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>/</span>
|
||
<span class='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'><</span>Dens<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
</span></div></div></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 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 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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:Dimension' title='5.4.2.2 Concepts [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'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>T, <span class='texttt'><i >dimension-interface</i></span><span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <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 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension__________'><span class='texttt'>Dimension</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span><span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'><</span>T, base_dimension<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> D<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:DimensionOf' title='5.4.2.2 Concepts [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 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension___________'><span class='texttt'>Dimension</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:Dimension' title='5.4.2.2 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension____________'><span class='texttt'>Dimension</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>D<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</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'><</span>symbol_text Symbol<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> <span id='lib:base_dimension'><a class='hidden_link' href='#lib:base_dimension' title='5.4.2.3 Types [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 <a href='#qty.dim.types-example-1'>1</a></i>: <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'><</span><span class='literal'>"L"</span><span class='anglebracket'>></span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span> dim_length;
|
||
</span> — <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'><</span><span class='keyword'>typename</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> <i >derived-dimension-impl</i> <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='operator'>:</span> <i >expr-fractions</i><span class='anglebracket'><</span><span class='keyword'>struct</span> dimension_one, Expr<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:SymbolicConstant______'></a><i >SymbolicConstant</i><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> derived_dimension <span class='keyword'>final</span> <span class='operator'>:</span> <i >dimension-interface</i>, <i >derived-dimension-impl</i><span class='anglebracket'><</span>Expr<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div></div><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 <a href='#qty.dim.types-example-2'>2</a></i>: <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<isq​::​dim_<span class='shy'></span>length, per<power<isq​::​dim_<span class='shy'></span>time, 2>>></span></span>
|
||
</span> — <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'><</span><span class='anglebracket'>></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'><</span><a href='#concept:Dimension' title='5.4.2.2 Concepts [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 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension______________'><span class='tcode_in_codeblock'>Dimension</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Dimension' title='5.4.2.2 Concepts [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'><</span><a href='#concept:Dimension' title='5.4.2.2 Concepts [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 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension_________________'><span class='tcode_in_codeblock'>Dimension</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Dimension' title='5.4.2.2 Concepts [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'><</span><a href='#concept:Dimension' title='5.4.2.2 Concepts [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 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension____________________'><span class='tcode_in_codeblock'>Dimension</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
|
||
<span class='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'><</span><a href='#concept:Dimension' title='5.4.2.2 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension_____________________'><span class='texttt'>Dimension</span></span></a> Lhs, <a href='#concept:Dimension' title='5.4.2.2 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension______________________'><span class='texttt'>Dimension</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Dimension' title='5.4.2.2 Concepts [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'><</span>derived_<span class='shy'></span>dimension, <span class='keyword'>struct</span> dimension_<span class='shy'></span>one<span class='anglebracket'>></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'><</span><a href='#concept:Dimension' title='5.4.2.2 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension________________________'><span class='texttt'>Dimension</span></span></a> Lhs, <a href='#concept:Dimension' title='5.4.2.2 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension_________________________'><span class='texttt'>Dimension</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Dimension' title='5.4.2.2 Concepts [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'><</span>derived_<span class='shy'></span>dimension, <span class='keyword'>struct</span> dimension_<span class='shy'></span>one<span class='anglebracket'>></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'><</span><a href='#concept:Dimension' title='5.4.2.2 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension___________________________'><span class='texttt'>Dimension</span></span></a> Lhs, <a href='#concept:Dimension' title='5.4.2.2 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension____________________________'><span class='texttt'>Dimension</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'>​::​</span>is_<span class='shy'></span>same_<span class='shy'></span>v<span class='anglebracket'><</span>Lhs, Rhs<span class='anglebracket'>></span></span><a class='hidden_link' href='#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 Concepts [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 Concepts [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'><</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 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension_______________________________'><span class='texttt'>Dimension</span></span></a> D<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Den <span class='operator'>!</span><span class='operator'>=</span> <span class='literal'>0</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:Dimension' title='5.4.2.2 Concepts [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'><</span>Num, Den, derived_<span class='shy'></span>dimension, <span class='keyword'>struct</span> dimension_<span class='shy'></span>one<span class='anglebracket'>></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 Concepts [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 Concepts [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'><</span><span class='literal'>1</span>, <span class='literal'>2</span><span class='anglebracket'>></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 Concepts [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 Concepts [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'><</span><span class='literal'>1</span>, <span class='literal'>3</span><span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> CharT <span class='operator'>=</span> <span class='keyword'>char</span>, std<span class='operator'>::</span>output_iterator<span class='anglebracket'><</span>CharT<span class='anglebracket'>></span> Out, <a href='#concept:Dimension' title='5.4.2.2 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension_____________________________________'><span class='texttt'>Dimension</span></span></a> D<span class='anglebracket'>></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'>&</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'><</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 Concepts [qty.dim.concepts]'><span id='conceptref:Dimension______________________________________'><span class='texttt'>Dimension</span></span></a> D<span class='anglebracket'>></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 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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>T, <span class='texttt'><i >quantity-spec-interface</i></span><span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='texttt'><i >is-specialization-of</i></span><span class='anglebracket'><</span>T, kind_of_<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec______________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'><</span>T, quantity_spec<span class='anglebracket'>></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 class='index' id='conceptref:QuantityKindSpec____'></a><span class='texttt'><i >QuantityKindSpec</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_______________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></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'><</span>T, derived_quantity_spec<span class='anglebracket'>></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'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<span class='texttt'><i >is-specialization-of</i></span><span class='anglebracket'><</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'>></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'><</span><span class='keyword'>auto</span> Child, <span class='keyword'>auto</span> Parent<span class='anglebracket'>></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'><</span><span class='keyword'>auto</span> To, <span class='keyword'>auto</span> From<span class='anglebracket'>></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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>From<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>To<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</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'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:ChildQuantitySpecOf'></a><span class='texttt'><i >ChildQuantitySpecOf</i></span><span class='anglebracket'><</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'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>auto</span> From, <span class='keyword'>auto</span> To<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>From<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>To<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> implicitly_convertible<span class='parenthesis'>(</span>From, To<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>auto</span> From, <span class='keyword'>auto</span> To<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec____________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>From<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>To<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> explicitly_convertible<span class='parenthesis'>(</span>From, To<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>auto</span> From, <span class='keyword'>auto</span> To<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec______________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>From<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_______________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>To<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> castable<span class='parenthesis'>(</span>From, To<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> QS<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:QuantitySpecOf' title='5.4.3.2 Concepts [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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec________________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_________________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>QS<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:QuantitySpecConvertibleTo'></a><span class='texttt'><i >QuantitySpecConvertibleTo</i></span><span class='anglebracket'><</span>T<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, QS<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<span class='operator'>!</span><a class='index' id='conceptref:NestedQuantityKindSpecOf'></a><span class='texttt'><i >NestedQuantityKindSpecOf</i></span><span class='anglebracket'><</span>T<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, QS<span class='anglebracket'>></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'><</span>T<span class='anglebracket'>></span> <span class='operator'>|</span><span class='operator'>|</span> <span class='operator'>!</span><a class='index' id='conceptref:NestedQuantityKindSpecOf_'></a><span class='texttt'><i >NestedQuantityKindSpecOf</i></span><span class='anglebracket'><</span>QS, T<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></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'><</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'>></span>
|
||
<span class='keyword'>struct</span> quantity_spec<span class='anglebracket'><</span>Dim, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></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'><</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'>></span>
|
||
<span class='keyword'>struct</span> quantity_spec<span class='anglebracket'><</span>Eq, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></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 Concepts [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'><</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'>></span>
|
||
<span class='keyword'>struct</span> quantity_spec<span class='anglebracket'><</span>QS, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></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 Concepts [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'><</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'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantitySpecExplicitlyConvertibleTo'></a><i >QuantitySpecExplicitlyConvertibleTo</i><span class='anglebracket'><</span>Eq, QS<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> quantity_spec<span class='anglebracket'><</span>QS, Eq, Args<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></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 Concepts [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 Named [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 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'>​::​</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 <a href='#named.qty-example-1'>1</a></i>: <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'><</span>dim_length<span class='anglebracket'>></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'><</span>pow<span class='anglebracket'><</span><span class='literal'>2</span><span class='anglebracket'>></span><span class='parenthesis'>(</span>length<span class='parenthesis'>)</span><span class='anglebracket'>></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'><</span>length<span class='anglebracket'>></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'><</span>dimensionless, arc_length <span class='operator'>/</span> radius, is_kind<span class='anglebracket'>></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> — <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'><</span><i >NamedQuantitySpec</i><a class='index' id='concept:NamedQuantitySpec_'></a> Q<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> <i >derived-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'><</span><span class='keyword'>struct</span> dimensionless, Expr<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> <i >derived-quantity-spec-impl</i>;
|
||
<span class='keyword'>using</span> <i >base</i> <span class='operator'>=</span> <i >expr-fractions</i><span class='anglebracket'><</span><span class='keyword'>struct</span> dimensionless, Expr<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:Dimension' title='5.4.2.2 Concepts [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'><</span><i >to-dimension</i>, derived_dimension, <span class='keyword'>struct</span> dimension_one<span class='anglebracket'>></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'><</span><a class='index' id='conceptref:SymbolicConstant________'></a><i >SymbolicConstant</i><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> derived_quantity_spec <span class='keyword'>final</span> <span class='operator'>:</span> <i >derived-quantity-spec-impl</i><span class='anglebracket'><</span>Expr<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='para'><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 <a href='#derived.qty-example-1'>1</a></i>: <span class='codeblock'><span class='keyword'>constexpr</span> <span class='keyword'>auto</span> area <span class='operator'>=</span> pow<span class='anglebracket'><</span><span class='literal'>2</span><span class='anglebracket'>></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<power<isq​::​length, 2>></span></span>
|
||
</span> — <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'>​::​</span><span class='texttt'><i >nums</i></span></span> and <span class='texttt'><span class='texttt'><i >base</i></span><span class='operator'>​::​</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'><</span>Pack<span class='anglebracket'>></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'>​::​</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'>​::​</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'><</span>derived_quantity_spec<span class='anglebracket'><</span><span class='anglebracket'>></span><span class='anglebracket'>></span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='para'><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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Q<span class='anglebracket'>></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'><</span>Q<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</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'><</span>Q<span class='anglebracket'>></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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec____________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> From, <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Q<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec______________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> <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'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:QuantityKindSpec________'></a><i >QuantityKindSpec</i><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>From<span class='parenthesis'>)</span><span class='anglebracket'>></span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> kind_of<span class='anglebracket'><</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_______________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Q<span class='anglebracket'>></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'><</span>Q<span class='anglebracket'>></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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> QS, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit________'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'><</span>U<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span> <a href='#concept:UnitOf' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:UnitOf'><span class='texttt'>UnitOf</span></span></a><span class='anglebracket'><</span>U, QS<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:Reference' title='5.4.5 Concepts [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'><</span>QS, U<span class='anglebracket'>></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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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'><</span><span class='keyword'>typename</span> Self, <a href='#concept:UnitOf' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:UnitOf_'><span class='tcode_in_codeblock'>UnitOf</span></span></a><span class='anglebracket'><</span>Self<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:Reference' title='5.4.5 Concepts [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'><</span><span class='keyword'>typename</span> Self, <span class='keyword'>typename</span> FwdQ, <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantitySpecExplicitlyConvertibleTo_'></a><i >QuantitySpecExplicitlyConvertibleTo</i><span class='anglebracket'><</span>Q<span class='operator'>::</span>quantity_spec, Self<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span><span class='operator'>&</span> q<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec________________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
|
||
<span class='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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Lhs, <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> <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'><</span>Lhs<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rhs<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></span><span class='parenthesis'>(</span><i >expr-multiply</i><span class='anglebracket'><</span>derived_quantity_spec, <span class='keyword'>struct</span> dimensionless<span class='anglebracket'>></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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec____________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Lhs, <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec______________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> <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'><</span>Lhs<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rhs<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></span><span class='parenthesis'>(</span><i >expr-divide</i><span class='anglebracket'><</span>derived_quantity_spec, <span class='keyword'>struct</span> dimensionless<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> Self, <a href='#concept:UnitOf' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:UnitOf__'><span class='texttt'>UnitOf</span></span></a><span class='anglebracket'><</span>Self<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:Reference' title='5.4.5 Concepts [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'><</span><span class='keyword'>typename</span> Self, <span class='keyword'>typename</span> FwdQ, <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantitySpecExplicitlyConvertibleTo__'></a><span class='texttt'><i >QuantitySpecExplicitlyConvertibleTo</i></span><span class='anglebracket'><</span>Q<span class='operator'>::</span>quantity_spec, Self<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span><span class='operator'>&</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'><</span>FwdQ<span class='anglebracket'>></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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_______________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Lhs, <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'>​::​</span>is_<span class='shy'></span>same_<span class='shy'></span>v<span class='anglebracket'><</span>Lhs, Rhs<span class='anglebracket'>></span></span><a class='hidden_link' href='#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 Concepts [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 Concepts [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'><</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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Q<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Den <span class='operator'>!</span><span class='operator'>=</span> <span class='literal'>0</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec____________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> 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'><</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></span><span class='parenthesis'>(</span>
|
||
<i >expr-pow</i><span class='anglebracket'><</span>Num, Den, derived_quantity_spec, <span class='keyword'>struct</span> dimensionless<span class='anglebracket'>></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 Concepts [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 Concepts [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'><</span><span class='literal'>1</span>, <span class='literal'>2</span><span class='anglebracket'>></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 Concepts [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 Concepts [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'><</span><span class='literal'>1</span>, <span class='literal'>3</span><span class='anglebracket'>></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'>&</span><span class='operator'>&</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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Q<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> <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'><</span>Q<span class='anglebracket'>></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'><</span>Q, quantity_<span class='shy'></span>spec<span class='anglebracket'>></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'>​::​</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'>​::​</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'>​::​</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'><</span>Q<span class='anglebracket'>></span></span> is <span class='texttt'><span class='literal'>true</span></span>,
|
||
returns
|
||
<span class='codeblock'><i >expr-map</i><span class='anglebracket'><</span><i >to-kind</i>, derived_quantity_spec, <span class='keyword'>struct</span> dimensionless<span class='anglebracket'>></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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Q<span class='anglebracket'>></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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec____________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Q<span class='anglebracket'>></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'><</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'>></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 Concepts [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 Concepts [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'><</span>Q1, Q2<span class='anglebracket'>></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'><</span>Q1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></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'><</span>Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Q1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></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'><</span>Q1<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='operator'>!</span><a class='index' id='conceptref:QuantityKindSpec_____________'></a><i >QuantityKindSpec</i><span class='anglebracket'><</span>Q2<span class='anglebracket'>></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'><</span>QQ1<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:NamedQuantitySpec_____'></a><i >NamedQuantitySpec</i><span class='anglebracket'><</span>QQ2<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</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'><</span>Q1<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:QuantityKindSpec_______________'></a><i >QuantityKindSpec</i><span class='anglebracket'><</span>Q2<span class='anglebracket'>></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'><</span>QQ1<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:DerivedQuantitySpec______'></a><i >DerivedQuantitySpec</i><span class='anglebracket'><</span>QQ2<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</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'><</span>Q1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></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'>&</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'>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'>&</span><span class='operator'>&</span>
|
||
<span class='parenthesis'>(</span><a class='index' id='conceptref:QuantitySpecConvertibleTo_'></a><i >QuantitySpecConvertibleTo</i><span class='anglebracket'><</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'>></span> <span class='operator'>|</span><span class='operator'>|</span>
|
||
<a class='index' id='conceptref:QuantitySpecConvertibleTo__'></a><i >QuantitySpecConvertibleTo</i><span class='anglebracket'><</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'>></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 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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_______________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> A, <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> B<span class='anglebracket'>></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'>​::​</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'>​::​</span>optional<span class='anglebracket'><</span><i ><span class='texttt'>unspecified</span></i><span class='anglebracket'>></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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Child, <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> Parent<span class='anglebracket'>></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 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 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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:MagConstant' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='concept:MagConstant'><span id='lib:MagConstant'><span class='texttt'>MagConstant</span></span></span></a> <span class='operator'>=</span> <a class='index' id='conceptref:SymbolicConstant_________'></a><span class='texttt'><i >SymbolicConstant</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'><</span>T, mag_constant<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='concept:UnitMagnitude'><span id='lib:UnitMagnitude'><span class='texttt'>UnitMagnitude</span></span></span></a> <span class='operator'>=</span> <span class='parenthesis'>(</span><span class='texttt'><i >is-specialization-of</i></span><span class='anglebracket'><</span>T, <span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >MagArg</i></span><a class='index' id='concept:MagArg'></a> <span class='operator'>=</span> std<span class='operator'>::</span>integral<span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>|</span><span class='operator'>|</span> <a href='#concept:MagConstant' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:MagConstant'><span class='texttt'>MagConstant</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span>; <span class='comment'>// <i >exposition only</i></span>
|
||
</code></div></div></div><div id='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'><</span>symbol_text Symbol, <span class='keyword'>long</span> <span class='keyword'>double</span> Value<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Value <span class='anglebracket'>></span> <span class='literal'>0</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>struct</span> mag_constant <span class='curlybracket'>{</span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>long</span> <span class='keyword'>double</span> <i >value</i> <span class='operator'>=</span> Value; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='texpara'><div id='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'><</span><span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Ms<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> <i >unit-magnitude</i> <span class='curlybracket'>{</span> <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='comment'>// <a href='#qty.unit.mag.ops' title='5.4.4.2.4 Operations'>[qty.<span class='shy'></span>unit.<span class='shy'></span>mag.<span class='shy'></span>ops]</a>, operations</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_____'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> M<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude______'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><i >unit-magnitude</i> lhs, M rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span><i >unit-magnitude</i> lhs, <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_______'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><i >unit-magnitude</i>, Rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>int</span> Num, <span class='keyword'>int</span> Den <span class='operator'>=</span> <span class='literal'>1</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <i >pow</i><span class='parenthesis'>(</span><i >unit-magnitude</i><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
|
||
<span class='comment'>// <a href='#qty.unit.mag.utils' title='5.4.4.2.5 Utilities'>[qty.<span class='shy'></span>unit.<span class='shy'></span>mag.<span class='shy'></span>utils]</a>, utilities</span>
|
||
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <i >is-positive-integral-power</i><span class='parenthesis'>(</span><i >unit-magnitude</i><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Ms2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <i >common-magnitude</i><span class='parenthesis'>(</span><i >unit-magnitude</i>, <span class='comment'>// <i >exposition only</i></span>
|
||
<i >unit-magnitude</i><span class='anglebracket'><</span>Ms2<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span><span class='parenthesis'>)</span>;
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='para'><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 Concepts [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 <a href='#qty.unit.mag.types-note-1'>1</a></i>: <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> — <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 <a href='#qty.unit.mag.types-note-2'>2</a></i>: <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> — <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'>​::​</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'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_________'><span class='texttt'>UnitMagnitude</span></span></a> M<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude__________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span> lhs, M rhs<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'>​::​</span>is_<span class='shy'></span>same_<span class='shy'></span>v<span class='anglebracket'><</span>M, <span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'><</span><span class='anglebracket'>></span><span class='anglebracket'>></span></span>, returns <span class='texttt'>lhs</span><a class='hidden_link' href='#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> ×<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 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude___________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> rhs<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'><</span><span class='operator'>-</span><span class='literal'>1</span><span class='anglebracket'>></span><span class='parenthesis'>(</span>rhs<span class='parenthesis'>)</span></span><a class='hidden_link' href='#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'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude____________'><span class='texttt'>UnitMagnitude</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span>, Rhs<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'>​::​</span>is_<span class='shy'></span>same_<span class='shy'></span>v<span class='anglebracket'><</span><span class='texttt'><i >unit-magnitude</i></span>, Rhs<span class='anglebracket'>></span></span><a class='hidden_link' href='#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'><</span><span class='keyword'>int</span> Num, <span class='keyword'>int</span> Den <span class='operator'>=</span> <span class='literal'>1</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >pow</i></span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span> base<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
</code></div></div></div></div><div class='para'><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'><</span><span class='anglebracket'>></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'><</span><a class='index' id='conceptref:MagArg___'></a><span class='texttt'><i >MagArg</i></span> <span class='keyword'>auto</span> V<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_____________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> mag <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
|
||
</code></div></div></div><div class='para'><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 Concepts [qty.unit.mag.concepts]'><span id='conceptref:MagConstant_'><span class='texttt'>MagConstant</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>V<span class='parenthesis'>)</span><span class='anglebracket'>></span></span> is satisfied,
|
||
initializes <span class='texttt'>mag</span> with <span class='texttt'><span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'><</span>V<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span></span><a class='hidden_link' href='#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'><</span>std<span class='operator'>::</span>intmax_t N, std<span class='operator'>::</span>intmax_t D<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>N <span class='anglebracket'>></span> <span class='literal'>0</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude______________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> mag_ratio <span class='operator'>=</span> <i ><span class='texttt'>see below</span></i>;
|
||
</code></div></div></div><div class='para'><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'><</span><a class='index' id='conceptref:MagArg____'></a><span class='texttt'><i >MagArg</i></span> <span class='keyword'>auto</span> Base, <span class='keyword'>int</span> Num, <span class='keyword'>int</span> Den <span class='operator'>=</span> <span class='literal'>1</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_______________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> mag_power <span class='operator'>=</span> <span class='texttt'><i >pow</i></span><span class='anglebracket'><</span>Num, Den<span class='anglebracket'>></span><span class='parenthesis'>(</span>mag<span class='anglebracket'><</span>Base<span class='anglebracket'>></span><span class='parenthesis'>)</span>;
|
||
</code></div></div></div><div class='para'><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'><</span><span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Ms2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >common-magnitude</i></span><span class='parenthesis'>(</span><span class='texttt'><i >unit-magnitude</i></span>, <span class='texttt'><i >unit-magnitude</i></span><span class='anglebracket'><</span>Ms2<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
</code></div></div></div></div><div class='para'><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'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <span class='keyword'>bool</span> space_before_unit_symbol <span class='operator'>=</span> <span class='literal'>true</span>;
|
||
</code></div></div></div><div class='para'><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 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 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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='concept:Unit'><span id='lib:Unit'><span class='texttt'>Unit</span></span></span></a> <span class='operator'>=</span> <a class='index' id='conceptref:SymbolicConstant__________'></a><span class='texttt'><i >SymbolicConstant</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>T, <span class='texttt'><i >unit-interface</i></span><span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:PrefixableUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='concept:PrefixableUnit'><span id='lib:PrefixableUnit'><span class='texttt'>PrefixableUnit</span></span></span></a> <span class='operator'>=</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'><</span>T, named_unit<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='concept:AssociatedUnit'><span id='lib:AssociatedUnit'><span class='texttt'>AssociatedUnit</span></span></span></a> <span class='operator'>=</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span>U<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='texttt'><i >has-associated-quantity</i></span><span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> U, <span class='keyword'>auto</span> QS<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:UnitOf' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='concept:UnitOf'><span id='lib:UnitOf'><span class='texttt'>UnitOf</span></span></span></a> <span class='operator'>=</span> <a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit_________'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'><</span>U<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>QS<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:QuantitySpecConvertibleTo___'></a><span class='texttt'><i >QuantitySpecConvertibleTo</i></span><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, QS<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<span class='parenthesis'>(</span>get_kind<span class='parenthesis'>(</span>QS<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> get_kind<span class='parenthesis'>(</span>get_quantity_spec<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
|
||
<span class='operator'>!</span><a class='index' id='conceptref:NestedQuantityKindSpecOf____'></a><span class='texttt'><i >NestedQuantityKindSpecOf</i></span><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, QS<span class='anglebracket'>></span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>auto</span> From, <span class='keyword'>auto</span> To<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >UnitConvertibleTo</i></span><a class='index' id='concept:UnitConvertibleTo'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
|
||
<a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>From<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>To<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span>convertible<span class='parenthesis'>(</span>From, To<span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> U, <span class='keyword'>auto</span> FromU, <span class='keyword'>auto</span> QS<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >UnitCompatibleWith</i></span><a class='index' id='concept:UnitCompatibleWith'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
|
||
<a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span>U<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>FromU<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec____________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>QS<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit__________'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'><</span>U<span class='anglebracket'>></span> <span class='operator'>|</span><span class='operator'>|</span> <a href='#concept:UnitOf' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:UnitOf___'><span class='texttt'>UnitOf</span></span></a><span class='anglebracket'><</span>U, QS<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:UnitConvertibleTo'></a><span class='texttt'><i >UnitConvertibleTo</i></span><span class='anglebracket'><</span>FromU, U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >OffsetUnit</i></span><a class='index' id='concept:OffsetUnit'></a> <span class='operator'>=</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='keyword'>requires</span> <span class='curlybracket'>{</span> T<span class='operator'>::</span><span class='texttt'><i >point-origin</i></span>; <span class='curlybracket'>}</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> From, <span class='keyword'>typename</span> To<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >PotentiallyConvertibleTo</i></span><a class='index' id='concept:PotentiallyConvertibleTo'></a> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
|
||
<a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span>From<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________________________'><span class='texttt'>Unit</span></span></a><span class='anglebracket'><</span>To<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<span class='parenthesis'>(</span><span class='parenthesis'>(</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit___________'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'><</span>From<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit____________'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'><</span>To<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
implicitly_convertible<span class='parenthesis'>(</span>get_quantity_spec<span class='parenthesis'>(</span>From<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, get_quantity_spec<span class='parenthesis'>(</span>To<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
|
||
<span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit_____________'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'><</span>From<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='operator'>!</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit______________'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'><</span>To<span class='anglebracket'>></span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
|
||
</code></div></div></div><div id='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'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude________________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> M, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> <i >canonical-unit</i> <span class='curlybracket'>{</span> <span class='comment'>// <i >exposition only</i></span>
|
||
M mag;
|
||
U reference_unit;
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='para'><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 <a href='#qty.canon.unit-note-1'>1</a></i>: <div id='qty.canon.unit-1.sentence-2' class='sentence'>Other types representing units are equal only if they have the same type<a class='hidden_link' href='#qty.canon.unit-1.sentence-2'>.</a></div> <div id='qty.canon.unit-1.sentence-3' class='sentence'><span class='texttt'><i >canonical-unit</i></span> is used to implement binary relations other than equality<a class='hidden_link' href='#qty.canon.unit-1.sentence-3'>.</a></div> — <i>end note</i>]</div></div> <div id='qty.canon.unit-1.sentence-4' class='sentence'><span class='texttt'>reference_<span class='shy'></span>unit</span> is simplified (<a href='#qty.sym.expr.algos' title='5.3.4.4 Algorithms'>[qty.<span class='shy'></span>sym.<span class='shy'></span>expr.<span class='shy'></span>algos]</a>)<a class='hidden_link' href='#qty.canon.unit-1.sentence-4'>.</a></div></div></div><div class='texpara'><div id='lib:get-canonical-unit,Unit'><div id='lib:Unit,get-canonical-unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:Unit,get-canonical-unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >get-canonical-unit</i></span><span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
</code></div></div></div></div><div class='para'><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'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_________________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> M, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>M <span class='operator'>!</span><span class='operator'>=</span> <i >unit-magnitude</i><span class='anglebracket'><</span><span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>&</span><span class='operator'>&</span> M <span class='operator'>!</span><span class='operator'>=</span> mag<span class='anglebracket'><</span><span class='literal'>1</span><span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>struct</span> scaled_unit <span class='keyword'>final</span> <span class='operator'>:</span> <i >unit-interface</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> scaled_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude__________________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> <i >mag</i> <span class='operator'>=</span> M; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> U <i >reference-unit</i><span class='curlybracket'>{</span><span class='curlybracket'>}</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >point-origin</i> <span class='operator'>=</span> U<span class='operator'>::</span>point_origin; <span class='comment'>// <i >exposition only</i>, present only</span>
|
||
<span class='comment'>// if the <span class='textsf'><i >qualified-id</i></span> <span class='tcode_in_codeblock'>U​::​point_<span class='shy'></span>origin</span> is valid and denotes an object</span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='para'><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'><</span>M, U<span class='anglebracket'>></span></span> is used by the library
|
||
to represent the unit <span class='math'><span class='texttt'>M</span> ×<span class='texttt'>U</span></span><a class='hidden_link' href='#qty.scaled.unit-1.sentence-1'>.</a></div></div></div></div><div id='qty.named.unit' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.4.5.3</a> Named <a class='abbr_ref' href='qty.named.unit.html'>[qty.named.unit]</a></h4><div class='texpara'><span id='lib:named_unit'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:named_unit'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a class='index' id='conceptref:QuantityKindSpec________________'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:BaseDimension___'></a><i >BaseDimension</i><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>QS<span class='operator'>.</span>dimension<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, QS<span class='anglebracket'>></span> <span class='operator'>:</span> <i >unit-interface</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >quantity-spec</i> <span class='operator'>=</span> QS; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a class='index' id='conceptref:QuantityKindSpec_________________'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS, <a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin___'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> PO<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:BaseDimension____'></a><i >BaseDimension</i><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>QS<span class='operator'>.</span>dimension<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, QS, PO<span class='anglebracket'>></span> <span class='operator'>:</span> <i >unit-interface</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >quantity-spec</i> <span class='operator'>=</span> QS; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >point-origin</i> <span class='operator'>=</span> PO; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol<span class='anglebracket'>></span> <span class='operator'>:</span> <i >unit-interface</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, U<span class='anglebracket'>></span> <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> U, <a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin____'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> PO<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, U, PO<span class='anglebracket'>></span> <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >point-origin</i> <span class='operator'>=</span> PO; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit_______________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> U, <a class='index' id='conceptref:QuantityKindSpec__________________'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span>QS<span class='operator'>.</span>dimension <span class='operator'>=</span><span class='operator'>=</span> <i >get-associated-quantity</i><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>.</span>dimension<span class='parenthesis'>)</span>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, U, QS<span class='anglebracket'>></span> <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >quantity-spec</i> <span class='operator'>=</span> QS; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> U, <a class='index' id='conceptref:QuantityKindSpec___________________'></a><i >QuantityKindSpec</i> <span class='keyword'>auto</span> QS,
|
||
<a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_____'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> <span class='keyword'>auto</span> PO<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span>QS<span class='operator'>.</span>dimension <span class='operator'>=</span><span class='operator'>=</span> <i >get-associated-quantity</i><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>.</span>dimension<span class='parenthesis'>)</span>
|
||
<span class='keyword'>struct</span> named_unit<span class='anglebracket'><</span>Symbol, U, QS, PO<span class='anglebracket'>></span> <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> named_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >quantity-spec</i> <span class='operator'>=</span> QS; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >point-origin</i> <span class='operator'>=</span> PO; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='para'><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 Named [qty.named.unit]'><span id='def:unit,named'><i >named unit</i></span></a> is a type that models <a href='#concept:PrefixableUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:PrefixableUnit_'><span class='texttt'>PrefixableUnit</span></span></a><a class='hidden_link' href='#qty.named.unit-1.sentence-1'>.</a></div> <div id='qty.named.unit-1.sentence-2' class='sentence'>A specialization of <span class='texttt'>named_<span class='shy'></span>unit</span> is used as a base type when defining a named unit<a class='hidden_link' href='#qty.named.unit-1.sentence-2'>.</a></div></div></div><div class='para'><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 Class template quantity_­point'>[qty.<span class='shy'></span>pt.<span class='shy'></span>syn]</a>)<a class='hidden_link' href='#qty.named.unit-5.sentence-1'>.</a></div></div></div><div class='para nonNormativeOnly'><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 <a href='#qty.named.unit-example-1'>1</a></i>: <span class='codeblock'><span class='comment'>// The first signature defines a base unit restricted to a kind of base quantity.</span>
|
||
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> second <span class='keyword'>final</span> <span class='operator'>:</span> named_unit<span class='anglebracket'><</span><span class='literal'>"s"</span>, kind_of<span class='anglebracket'><</span>time<span class='anglebracket'>></span><span class='anglebracket'>></span> <span class='curlybracket'>{</span>
|
||
<span class='curlybracket'>}</span> second;
|
||
|
||
<span class='comment'>// The third and fourth signatures give a name to the unit argument.</span>
|
||
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> minute <span class='keyword'>final</span> <span class='operator'>:</span> named_unit<span class='anglebracket'><</span><span class='literal'>"min"</span>, mag<span class='anglebracket'><</span><span class='literal'>60</span><span class='anglebracket'>></span> <span class='operator'>*</span> second<span class='anglebracket'>></span> <span class='curlybracket'>{</span>
|
||
<span class='curlybracket'>}</span> minute; <span class='comment'>// <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">min</span></span></span></span><span class="mjx-mo MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.077em; padding-bottom: 0.298em;">=</span></span><span class="mjx-mn MJXc-space3"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">60</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.372em;"> s</span></span></span></span></span></span></span>.</span>
|
||
|
||
<span class='comment'>// The fourth signature also further restricts the kind of quantity.</span>
|
||
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>struct</span> hertz <span class='keyword'>final</span> <span class='operator'>:</span> named_unit<span class='anglebracket'><</span><span class='literal'>"Hz"</span>, inverse<span class='parenthesis'>(</span>second<span class='parenthesis'>)</span>, kind_of<span class='anglebracket'><</span>frequency<span class='anglebracket'>></span><span class='anglebracket'>></span> <span class='curlybracket'>{</span>
|
||
<span class='curlybracket'>}</span> hertz; <span class='comment'>// <span class='math'><span class='textrm'>Hz</span></span> can't measure becquerel, activity,</span>
|
||
<span class='comment'>// or any other quantity with dimension <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-msubsup"><span class="mjx-base"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">T</span></span></span></span></span><span class="mjx-sup" style="font-size: 70.7%; vertical-align: 0.607em; padding-left: 0px; padding-right: 0.071em;"><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.298em; padding-bottom: 0.446em;">−</span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">1</span></span></span></span></span></span></span></span></span></span>
|
||
<span class='comment'>// that isn't a kind of frequency.</span>
|
||
</span> — <i>end example</i>]</div></div></div></div></div><div id='qty.prefixed.unit' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.4.5.4</a> Prefixed <a class='abbr_ref' href='qty.prefixed.unit.html'>[qty.prefixed.unit]</a></h4><div class='texpara'><span id='lib:prefixed_unit'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:prefixed_unit'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>symbol_text Symbol, <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude___________________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span> M, <a href='#concept:PrefixableUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:PrefixableUnit__'><span class='tcode_in_codeblock'>PrefixableUnit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>Symbol<span class='operator'>.</span>empty<span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>struct</span> prefixed_unit <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span>M <span class='operator'>*</span> U<span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> prefixed_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >symbol</i> <span class='operator'>=</span> Symbol <span class='operator'>+</span> U<span class='operator'>.</span><i >symbol</i>; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='para'><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'><</span>Symbol, M, U<span class='anglebracket'>></span></span> represents the unit <span class='texttt'>U</span> with a unit prefix (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-26">IEC 60050, 112-01-26</a>)<a class='hidden_link' href='#qty.prefixed.unit-1.sentence-1'>.</a></div> <div id='qty.prefixed.unit-1.sentence-2' class='sentence'><span class='texttt'>Symbol</span> is the symbol of the unit prefix<a class='hidden_link' href='#qty.prefixed.unit-1.sentence-2'>.</a></div> <div id='qty.prefixed.unit-1.sentence-3' class='sentence'><span class='texttt'>M</span> is the factor of the unit prefix<a class='hidden_link' href='#qty.prefixed.unit-1.sentence-3'>.</a></div> <div id='qty.prefixed.unit-1.sentence-4' class='sentence'>A specialization of <span class='texttt'>prefixed_<span class='shy'></span>unit</span> is used as a base type when defining a unit prefix<a class='hidden_link' href='#qty.prefixed.unit-1.sentence-4'>.</a></div> <div id='qty.prefixed.unit-example-1' class='example'><div class='texpara'>[<i>Example <a href='#qty.prefixed.unit-example-1'>1</a></i>: <span class='codeblock'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:PrefixableUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:PrefixableUnit___'><span class='tcode_in_codeblock'>PrefixableUnit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> kilo_ <span class='operator'>:</span> prefixed_unit<span class='anglebracket'><</span><span class='literal'>"k"</span>, mag_power<span class='anglebracket'><</span><span class='literal'>10</span>, <span class='literal'>3</span><span class='anglebracket'>></span>, U<span class='anglebracket'>></span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:PrefixableUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:PrefixableUnit____'><span class='tcode_in_codeblock'>PrefixableUnit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> kilo_<span class='anglebracket'><</span>U<span class='anglebracket'>></span> kilo;
|
||
|
||
<span class='keyword'>inline</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> kilogram <span class='operator'>=</span> kilo<span class='anglebracket'><</span>si<span class='operator'>::</span>gram<span class='anglebracket'>></span>;
|
||
</span> — <i>end example</i>]</div></div></div></div></div><div id='qty.common.unit' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.4.5.5</a> Common <a class='abbr_ref' href='qty.common.unit.html'>[qty.common.unit]</a></h4><div class='texpara'><span id='lib:common_unit'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:common_unit'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U1, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U2, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Rest<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> common_unit <span class='keyword'>final</span> <span class='operator'>:</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><i >get-common-scaled-unit</i><span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rest<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='operator'>::</span><i >base-type</i>
|
||
<span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> common_unit; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>static</span> <span class='keyword'>constexpr</span> <span class='keyword'>auto</span> <i >common-unit</i> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
|
||
<i >get-common-scaled-unit</i><span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rest<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='para'><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 <a href='#qty.common.unit-example-1'>1</a></i>: <div id='qty.common.unit-1.sentence-2' class='sentence'>The result of <span class='texttt'><span class='literal'>1</span> <span class='operator'>*</span> km <span class='operator'>+</span> <span class='literal'>1</span> <span class='operator'>*</span> mi</span>
|
||
has a common unit <span class="mjx-chtml"><span class="mjx-math"><span class="mjx-mrow" aria-hidden="true"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">[</span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">8</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">/</span></span></span></span><span class="mjx-mn"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.372em; padding-bottom: 0.372em;">125</span></span><span class="mjx-mo"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.446em; padding-bottom: 0.593em;">]</span></span><span class="mjx-texatom"><span class="mjx-mrow"><span class="mjx-mtext"><span class="mjx-char MJXc-TeX-main-R" style="padding-top: 0.151em; padding-bottom: 0.372em;"> m</span></span></span></span></span></span></span>
|
||
encapsulated by <span class='texttt'>common_<span class='shy'></span>unit<span class='anglebracket'><</span>mi, km<span class='anglebracket'>></span></span><a class='hidden_link' href='#qty.common.unit-1.sentence-2'>.</a></div> — <i>end example</i>]</div></div> <div id='qty.common.unit-1.sentence-3' class='sentence'>
|
||
A program that instantiates a specialization of <span class='texttt'>common_<span class='shy'></span>unit</span>
|
||
that is not a possible result of the library specifications
|
||
is ill-formed, no diagnostic required<a class='hidden_link' href='#qty.common.unit-1.sentence-3'>.</a></div></div></div><div class='texpara'><div class='itemdecl' id='qty.common.unit-itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#qty.common.unit-itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________'><span class='texttt'>Unit</span></span></a> U1, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________'><span class='texttt'>Unit</span></span></a> U2, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________'><span class='texttt'>Unit</span></span></a><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Rest<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='texttt'><i >get-common-scaled-unit</i></span><span class='parenthesis'>(</span>U1, U2, Rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> rest<span class='parenthesis'>)</span> <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
|
||
</code></div></div><div class='para'><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'><</span><span class='literal'>1</span><span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> canonical_lhs<span class='operator'>.</span>reference_unit;
|
||
<span class='keyword'>else</span>
|
||
<span class='keyword'>return</span> scaled_unit<span class='anglebracket'><</span>common_mag, <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>canonical_lhs<span class='operator'>.</span>reference_unit<span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
<span class='curlybracket'>}</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>;
|
||
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>rest<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>0</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> res;
|
||
<span class='keyword'>else</span>
|
||
<span class='keyword'>return</span> <i >get-common-scaled-unit</i><span class='parenthesis'>(</span>res, rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
|
||
</span></div></div></div></div><div class='para'><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'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>Rest<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>0</span> <span class='operator'>|</span><span class='operator'>|</span> <span class='keyword'>requires</span> <span class='curlybracket'>{</span>
|
||
<i >get-common-scaled-unit</i><span class='parenthesis'>(</span><i >get-common-scaled-unit</i><span class='parenthesis'>(</span>u1, u2<span class='parenthesis'>)</span>, rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
|
||
<span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
</span></div></div></div></div></div><div id='qty.derived.unit' class='section'><h4 ><a class='secnum' style='min-width:110pt'>5.4.4.5.6</a> Derived <a class='abbr_ref' href='qty.derived.unit.html'>[qty.derived.unit]</a></h4><div class='texpara'><span id='lib:derived_unit'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:derived_unit'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> <i >derived-unit-impl</i> <span class='operator'>:</span> <span class='comment'>// <i >exposition only</i></span>
|
||
<i >unit-interface</i>,
|
||
<i >expr-fractions</i><span class='anglebracket'><</span><span class='keyword'>struct</span> one, Expr<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>using</span> <i >base-type</i> <span class='operator'>=</span> <i >derived-unit-impl</i>; <span class='comment'>// <i >exposition only</i></span>
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:SymbolicConstant___________'></a><i >SymbolicConstant</i><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> Expr<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> derived_unit <span class='keyword'>final</span> <span class='operator'>:</span> <i >derived-unit-impl</i><span class='anglebracket'><</span>Expr<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='para'><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 <a href='#qty.derived.unit-example-1'>1</a></i>: <span class='codeblock'><span class='keyword'>using</span> <span class='keyword'>namespace</span> si<span class='operator'>::</span>unit_symbols;
|
||
<span class='keyword'>int</span> x <span class='operator'>=</span> m <span class='operator'>*</span> m; <span class='comment'>// error: cannot construct from <span class='tcode_in_codeblock'>derived_<span class='shy'></span>unit<power<si​::​metre, 2>></span></span>
|
||
<span class='keyword'>int</span> y <span class='operator'>=</span> m <span class='operator'>*</span> s; <span class='comment'>// error: cannot construct from <span class='tcode_in_codeblock'>derived_<span class='shy'></span>unit<si​::​metre, si​::​second></span></span>
|
||
<span class='keyword'>int</span> z <span class='operator'>=</span> m <span class='operator'>/</span> s; <span class='comment'>// error: cannot construct from <span class='tcode_in_codeblock'>derived_<span class='shy'></span>unit<si​::​metre, per<si​::​second>></span></span>
|
||
</span> — <i>end example</i>]</div></div> <div id='qty.derived.unit-1.sentence-2' class='sentence'>
|
||
A program that instantiates a specialization of <span class='texttt'>derived_<span class='shy'></span>unit</span>
|
||
that is not a possible result of the library specifications
|
||
is ill-formed, no diagnostic required<a class='hidden_link' href='#qty.derived.unit-1.sentence-2'>.</a></div></div></div></div><div id='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'><</span><span class='anglebracket'>></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'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude____________________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> M, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>M, U u<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span>, <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_____________________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude______________________'><span class='tcode_in_codeblock'>UnitMagnitude</span></span></a> M, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>M mag, U u<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='comment'>// <a href='#qty.unit.cmp' title='5.4.4.7 Comparison'>[qty.<span class='shy'></span>unit.<span class='shy'></span>cmp]</a>, comparison</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> equivalent<span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='curlybracket'>}</span>
|
||
</span></span></div><div class='texpara'><div id='lib:Unit,operator*'><div id='lib:operator*,Unit'><div id='lib:UnitMagnitude,operator*_'><div id='lib:operator*,UnitMagnitude_'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,UnitMagnitude_'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_______________________'><span class='texttt'>UnitMagnitude</span></span></a> M, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>M, U u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div></div></div><div class='para'><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'><</span>M, <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>mag<span class='anglebracket'><</span><span class='literal'>1</span><span class='anglebracket'>></span><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> u;
|
||
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-specialization-of</i><span class='anglebracket'><</span>U, scaled_unit<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>M<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> U<span class='operator'>::</span><i >mag</i> <span class='operator'>=</span><span class='operator'>=</span> mag<span class='anglebracket'><</span><span class='literal'>1</span><span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> U<span class='operator'>::</span><i >reference-unit</i>;
|
||
<span class='keyword'>else</span>
|
||
<span class='keyword'>return</span> scaled_unit<span class='anglebracket'><</span>M<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> U<span class='operator'>::</span><i >mag</i>, <span class='keyword'>decltype</span><span class='parenthesis'>(</span><span class='keyword'>auto</span><span class='parenthesis'>(</span>U<span class='operator'>::</span><i >reference-unit</i><span class='parenthesis'>)</span><span class='parenthesis'>)</span><span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
<span class='curlybracket'>}</span> <span class='keyword'>else</span>
|
||
<span class='keyword'>return</span> scaled_unit<span class='anglebracket'><</span>M<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
</span></div></div></div></div><div class='texpara'><div class='itemdecl' id='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 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span>, <a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude________________________'><span class='texttt'>UnitMagnitude</span></span></a> <span class='keyword'>auto</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
|
||
</code></div></div><div class='para'><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'><</span><a href='#concept:UnitMagnitude' title='5.4.4.2.2 Concepts [qty.unit.mag.concepts]'><span id='conceptref:UnitMagnitude_________________________'><span class='texttt'>UnitMagnitude</span></span></a> M, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>M mag, U u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div></div></div><div class='para'><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'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________________________'><span class='texttt'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'><</span>derived_<span class='shy'></span>unit, <span class='keyword'>struct</span> one<span class='anglebracket'>></span><span class='parenthesis'>(</span>lhs, rhs<span class='parenthesis'>)</span></span><a class='hidden_link' href='#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'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'><</span>derived_<span class='shy'></span>unit, <span class='keyword'>struct</span> one<span class='anglebracket'>></span><span class='parenthesis'>(</span>lhs, rhs<span class='parenthesis'>)</span></span><a class='hidden_link' href='#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 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> inverse<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'><</span>std<span class='operator'>::</span>intmax_t Num, std<span class='operator'>::</span>intmax_t Den <span class='operator'>=</span> <span class='literal'>1</span>, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Den <span class='operator'>!</span><span class='operator'>=</span> <span class='literal'>0</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> pow<span class='parenthesis'>(</span>U u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'><</span>Num, Den, derived_<span class='shy'></span>unit, <span class='keyword'>struct</span> one<span class='anglebracket'>></span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#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 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> sqrt<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'><</span><span class='literal'>1</span>, <span class='literal'>2</span><span class='anglebracket'>></span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#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 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> cbrt<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'><</span><span class='literal'>1</span>, <span class='literal'>3</span><span class='anglebracket'>></span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#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 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> square<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'><</span><span class='literal'>2</span><span class='anglebracket'>></span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#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 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> cubic<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'><</span><span class='literal'>3</span><span class='anglebracket'>></span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span></span><a class='hidden_link' href='#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'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>Lhs, Rhs<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'>​::​</span>is_<span class='shy'></span>same_<span class='shy'></span>v<span class='anglebracket'><</span>Lhs, Rhs<span class='anglebracket'>></span></span><a class='hidden_link' href='#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'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> Lhs, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> Rhs<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> equivalent<span class='parenthesis'>(</span>Lhs lhs, Rhs rhs<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'>&</span><span class='operator'>&</span>
|
||
lhs_canonical<span class='operator'>.</span>reference_unit <span class='operator'>=</span><span class='operator'>=</span> rhs_canonical<span class='operator'>.</span>reference_unit;
|
||
</span></div></div></div></div><div class='texpara'><div id='lib:Unit,convertible'><div id='lib:convertible,Unit'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:convertible,Unit'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> From, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> To<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> convertible<span class='parenthesis'>(</span>From from, To to<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'><</span>From, To<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> <span class='literal'>true</span>;
|
||
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><a class='index' id='conceptref:PotentiallyConvertibleTo'></a><i >PotentiallyConvertibleTo</i><span class='anglebracket'><</span>From, To<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> std<span class='operator'>::</span>is_same_v<span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span><i >get-canonical-unit</i><span class='parenthesis'>(</span>from<span class='parenthesis'>)</span><span class='operator'>.</span>reference_unit<span class='parenthesis'>)</span>,
|
||
<span class='keyword'>decltype</span><span class='parenthesis'>(</span><i >get-canonical-unit</i><span class='parenthesis'>(</span>to<span class='parenthesis'>)</span><span class='operator'>.</span>reference_unit<span class='parenthesis'>)</span><span class='anglebracket'>></span>;
|
||
<span class='keyword'>else</span>
|
||
<span class='keyword'>return</span> <span class='literal'>false</span>;
|
||
</span></div></div></div></div></div><div id='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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> get_quantity_spec<span class='parenthesis'>(</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit_________________'><span class='texttt'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'><</span><span class='texttt'><i >get-associated-quantity</i></span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span><span class='anglebracket'>></span></span><a class='hidden_link' href='#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 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> get_unit<span class='parenthesis'>(</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit__________________'><span class='texttt'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> u<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> get_common_unit<span class='parenthesis'>(</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> us<span class='parenthesis'>)</span>
|
||
<span class='keyword'>requires</span> <i ><span class='texttt'>see below</span></i>;
|
||
</code></div></div></div></div><div class='para'><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'><</span>U1, common_unit<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>return</span> <i >TBD.</i>;
|
||
<span class='curlybracket'>}</span> <span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'><</span>U2, common_unit<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> get_common_unit<span class='parenthesis'>(</span>u2, u1<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>std<span class='operator'>::</span>is_same_v<span class='anglebracket'><</span>U1, U2<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> u1;
|
||
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>equivalent<span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>U1, <span class='keyword'>typename</span> U2<span class='operator'>::</span><i >base-type</i><span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> u1;
|
||
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>U2, <span class='keyword'>typename</span> U1<span class='operator'>::</span><i >base-type</i><span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> u2;
|
||
<span class='keyword'>else</span>
|
||
<span class='keyword'>return</span> std<span class='operator'>::</span>conditional_t<span class='anglebracket'><</span><i >type-less-impl</i><span class='anglebracket'><</span>U1, U2<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span>, U1, U2<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
<span class='curlybracket'>}</span> <span class='keyword'>else</span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> canonical_lhs <span class='operator'>=</span> <i >get-canonical-unit</i><span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
|
||
<span class='keyword'>constexpr</span> <span class='keyword'>auto</span> canonical_rhs <span class='operator'>=</span> <i >get-canonical-unit</i><span class='parenthesis'>(</span>U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-positive-integral-power</i><span class='parenthesis'>(</span>canonical_lhs<span class='operator'>.</span>mag <span class='operator'>/</span> canonical_rhs<span class='operator'>.</span>mag<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> u2;
|
||
<span class='keyword'>else</span> <span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >is-positive-integral-power</i><span class='parenthesis'>(</span>canonical_rhs<span class='operator'>.</span>mag <span class='operator'>/</span> canonical_lhs<span class='operator'>.</span>mag<span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> u1;
|
||
<span class='keyword'>else</span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>if</span> <span class='keyword'>constexpr</span> <span class='parenthesis'>(</span><i >type-less</i><span class='anglebracket'><</span>U1, U2<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> common_unit<span class='anglebracket'><</span>U1, U2<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
<span class='keyword'>else</span>
|
||
<span class='keyword'>return</span> common_unit<span class='anglebracket'><</span>U2, U1<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
<span class='curlybracket'>}</span>
|
||
<span class='curlybracket'>}</span>
|
||
<span class='curlybracket'>}</span> <span class='keyword'>else</span>
|
||
<span class='keyword'>return</span> get_common_unit<span class='parenthesis'>(</span>get_common_unit<span class='parenthesis'>(</span>u1, u2<span class='parenthesis'>)</span>, rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>;
|
||
</span></div></div></div></div><div class='para'><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'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>us<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>1</span> <span class='operator'>|</span><span class='operator'>|</span> <span class='comment'>//</span>
|
||
<span class='parenthesis'>(</span><span class='keyword'>sizeof</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>(</span>us<span class='parenthesis'>)</span> <span class='operator'>=</span><span class='operator'>=</span> <span class='literal'>2</span> <span class='operator'>&</span><span class='operator'>&</span> convertible<span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>|</span><span class='operator'>|</span>
|
||
<span class='keyword'>requires</span> <span class='curlybracket'>{</span> get_common_unit<span class='parenthesis'>(</span>get_common_unit<span class='parenthesis'>(</span>u1, u2<span class='parenthesis'>)</span>, rest<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>; <span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
</span></div></div></div></div></div><div id='assoc.qty' class='section'><h4 ><a class='secnum' style='min-width:95pt'>5.4.4.9</a> Associated quantity <a class='abbr_ref' href='assoc.qty.html'>[assoc.qty]</a></h4><div class='texpara'><div id='lib:has-associated-quantity,Unit'><div id='lib:Unit,has-associated-quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:Unit,has-associated-quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='texttt'><i >has-associated-quantity</i></span><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
</code></div></div></div></div><div class='para'><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'>​::​</span><span class='texttt'><i >quantity-spec</i></span></span> is a valid expression,
|
||
returns <span class='texttt'><span class='literal'>true</span></span><a class='hidden_link' href='#assoc.qty-1.1.sentence-1'>.</a></div></div></li><li id='assoc.qty-1.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-1.2'>(1.2)</a></div><div class='texpara'><div id='assoc.qty-1.2.sentence-1' class='sentence'>Otherwise, if <span class='texttt'>U<span class='operator'>​::​</span><span class='texttt'><i >reference-unit</i></span></span> is a valid expression,
|
||
returns
|
||
<span class='codeblock'><i >has-associated-quantity</i><span class='parenthesis'>(</span>U<span class='operator'>::</span><i >reference-unit</i><span class='parenthesis'>)</span>
|
||
</span></div></div></li><li id='assoc.qty-1.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-1.3'>(1.3)</a></div><div class='texpara'><div id='assoc.qty-1.3.sentence-1' class='sentence'>Otherwise, if
|
||
<span class='texttt'><span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'><</span>U, <span class='texttt'><i >expr-fractions</i></span><span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
|
||
is <span class='texttt'><span class='literal'>true</span></span>,
|
||
let <span class='texttt'>Nums</span> and <span class='texttt'>Dens</span>
|
||
be packs denoting the template arguments of
|
||
<span class='texttt'>U<span class='operator'>​::​</span><span class='texttt'><i >nums</i></span></span> and <span class='texttt'>U<span class='operator'>​::​</span><span class='texttt'><i >dens</i></span></span>, respectively<a class='hidden_link' href='#assoc.qty-1.3.sentence-1'>.</a></div> <div id='assoc.qty-1.3.sentence-2' class='sentence'>Returns
|
||
<span class='codeblock'><span class='parenthesis'>(</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> <span class='operator'>&</span><span class='operator'>&</span> <i >has-associated-quantity</i><span class='parenthesis'>(</span><i >expr-type</i><span class='anglebracket'><</span>Nums<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<span class='parenthesis'>(</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span> <span class='operator'>&</span><span class='operator'>&</span> <i >has-associated-quantity</i><span class='parenthesis'>(</span><i >expr-type</i><span class='anglebracket'><</span>Dens<span class='anglebracket'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>
|
||
</span></div></div></li><li id='assoc.qty-1.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-1.4'>(1.4)</a></div><div class='texpara'><div id='assoc.qty-1.4.sentence-1' class='sentence'>Otherwise, returns <span class='texttt'><span class='literal'>false</span></span><a class='hidden_link' href='#assoc.qty-1.4.sentence-1'>.</a></div></div></li></ul></div></div></div></div><div class='texpara'><div id='lib:get-associated-quantity,AssociatedUnit'><div id='lib:AssociatedUnit,get-associated-quantity'><div class='itemdecl'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:AssociatedUnit,get-associated-quantity'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit___________________'><span class='texttt'>AssociatedUnit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='texttt'><i >get-associated-quantity</i></span><span class='parenthesis'>(</span>U u<span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
</code></div></div></div></div><div class='para'><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'><</span>Us<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></span></span>,
|
||
returns
|
||
<span class='codeblock'>get_common_quantity_spec<span class='parenthesis'>(</span><i >get-associated-quantity</i><span class='parenthesis'>(</span>Us<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='parenthesis'>)</span>
|
||
</span></li><li id='assoc.qty-2.2'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-2.2'>(2.2)</a></div>Otherwise, if <span class='texttt'>U<span class='operator'>​::​</span><span class='texttt'><i >quantity-spec</i></span></span> is a valid expression,
|
||
returns
|
||
<span class='codeblock'><i >remove-kind</i><span class='parenthesis'>(</span>U<span class='operator'>::</span><i >quantity-spec</i><span class='parenthesis'>)</span>
|
||
</span></li><li id='assoc.qty-2.3'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-2.3'>(2.3)</a></div>Otherwise, if <span class='texttt'>U<span class='operator'>​::​</span><span class='texttt'><i >reference-unit</i></span></span> is a valid expression,
|
||
returns
|
||
<span class='codeblock'><i >get-associated-quantity</i><span class='parenthesis'>(</span>U<span class='operator'>::</span><i >reference-unit</i><span class='parenthesis'>)</span>
|
||
</span></li><li id='assoc.qty-2.4'><div class='marginalizedparent' style='left:-39mm'><a class='marginalized' href='#assoc.qty-2.4'>(2.4)</a></div>Otherwise, if
|
||
<span class='texttt'><span class='texttt'><i >is-derived-from-specialization-of</i></span><span class='anglebracket'><</span>U, <span class='texttt'><i >expr-fractions</i></span><span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span></span>
|
||
is <span class='texttt'><span class='literal'>true</span></span>,
|
||
returns
|
||
<span class='codeblock'><i >expr-map</i><span class='anglebracket'><</span><i >to-quantity-spec</i>, derived_quantity_spec, <span class='keyword'>struct</span> dimensionless<span class='anglebracket'>></span><span class='parenthesis'>(</span>u<span class='parenthesis'>)</span>
|
||
</span>
|
||
where <span class='texttt'><i >to-quantity-spec</i></span> is defined as follows:
|
||
<span class='codeblock'><span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit____________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>using</span> <i >to-quantity-spec</i> <span class='operator'>=</span> <span class='keyword'>decltype</span><span class='parenthesis'>(</span><i >get-associated-quantity</i><span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>; <span class='comment'>// <i >exposition only</i></span>
|
||
</span></li></ul></div></div></div></div></div><div id='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'><</span><span class='keyword'>typename</span> CharT <span class='operator'>=</span> <span class='keyword'>char</span>, std<span class='operator'>::</span>output_iterator<span class='anglebracket'><</span>CharT<span class='anglebracket'>></span> Out, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> Out unit_symbol_to<span class='parenthesis'>(</span>Out out, U u, <span class='keyword'>const</span> unit_symbol_formatting<span class='operator'>&</span> fmt <span class='operator'>=</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'><</span>unit_symbol_formatting fmt <span class='operator'>=</span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>, <span class='keyword'>typename</span> CharT <span class='operator'>=</span> <span class='keyword'>char</span>, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> std<span class='operator'>::</span>string_view unit_symbol<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span>;
|
||
</code></div></div></div></div><div class='para'><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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:Reference' title='5.4.5 Concepts [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 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit_____________________'><span class='texttt'>AssociatedUnit</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></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'><</span>T, reference<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> QS<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:ReferenceOf' title='5.4.5 Concepts [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 Concepts [qty.ref.concepts]'><span id='conceptref:Reference______________________'><span class='texttt'>Reference</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:QuantitySpecOf' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpecOf'><span class='texttt'>QuantitySpecOf</span></span></a><span class='anglebracket'><</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'>></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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>using</span> <i >reference-t</i> <span class='operator'>=</span> reference<span class='anglebracket'><</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'>></span>; <span class='comment'>// <i >exposition only</i></span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> <span id='lib:reference'><a class='hidden_link' href='#lib:reference' title='5.4.6 Class template reference [qty.ref.syn]'>reference</a></span> <span class='curlybracket'>{</span>
|
||
<span class='comment'>// <a href='#qty.ref.ops' title='5.4.7 Operations'>[qty.<span class='shy'></span>ref.<span class='shy'></span>ops]</a>, operations</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Q2, <span class='keyword'>typename</span> U2<span class='anglebracket'>></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'><</span>Q2, U2<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='operator'>-</span><span class='anglebracket'>></span> <i >reference-t</i><span class='anglebracket'><</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'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit______________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U2<span class='anglebracket'>></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'>></span> <i >reference-t</i><span class='anglebracket'><</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'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit_______________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U1<span class='anglebracket'>></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'>></span> <i >reference-t</i><span class='anglebracket'><</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'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Q2, <span class='keyword'>typename</span> U2<span class='anglebracket'>></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'><</span>Q2, U2<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='operator'>-</span><span class='anglebracket'>></span> <i >reference-t</i><span class='anglebracket'><</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'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit________________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U2<span class='anglebracket'>></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'>></span> <i >reference-t</i><span class='anglebracket'><</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'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit_________________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U1<span class='anglebracket'>></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'>></span> <i >reference-t</i><span class='anglebracket'><</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'>></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'>></span> <i >reference-t</i><span class='anglebracket'><</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'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>intmax_t Num, std<span class='operator'>::</span>intmax_t Den <span class='operator'>=</span> <span class='literal'>1</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Den <span class='operator'>!</span><span class='operator'>=</span> <span class='literal'>0</span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>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'>></span> <i >reference-t</i><span class='anglebracket'><</span>pow<span class='anglebracket'><</span>Num, Den<span class='anglebracket'>></span><span class='parenthesis'>(</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, pow<span class='anglebracket'><</span>Num, Den<span class='anglebracket'>></span><span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></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'>></span> <i >reference-t</i><span class='anglebracket'><</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'>></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'>></span> <i >reference-t</i><span class='anglebracket'><</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'>></span>;
|
||
|
||
<span class='comment'>// <a href='#qty.ref.cmp' title='5.4.8 Comparison'>[qty.<span class='shy'></span>ref.<span class='shy'></span>cmp]</a>, comparison</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Q2, <span class='keyword'>typename</span> U2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>reference, reference<span class='anglebracket'><</span>Q2, U2<span class='anglebracket'>></span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit__________________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>reference, U2 u2<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Q2, <span class='keyword'>typename</span> U2<span class='anglebracket'>></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'><</span>Q2, U2<span class='anglebracket'>></span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit___________________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U2<span class='anglebracket'>></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'><</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit____________________________'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U1<span class='anglebracket'>></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'><</span>Q, U<span class='anglebracket'>></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 <a href='#qty.ref.syn-note-1'>1</a></i>: <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 <a href='#qty.ref.syn-example-1'>1</a></i>: <span class='codeblock'><span class='keyword'>using</span> <span class='keyword'>namespace</span> si<span class='operator'>::</span>unit_symbols;
|
||
<span class='keyword'>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> — <i>end example</i>]</div></div> — <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'>></span> <span class='texttt'><i >reference-t</i></span><span class='anglebracket'><</span>T<span class='operator'>.</span><span class='operator'>.</span><span class='operator'>.</span><span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> FwdRep, <a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference_______________________'><span class='texttt'>Reference</span></span></a> R,
|
||
<a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf______'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></span> Rep <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdRep<span class='anglebracket'>></span><span class='anglebracket'>></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'><</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'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>constexpr</span> quantity<span class='anglebracket'><</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rep<span class='anglebracket'>></span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>FwdRep<span class='operator'>&</span><span class='operator'>&</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'>​::​</span>forward<span class='anglebracket'><</span>FwdRep<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> FwdRep, <a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference________________________'><span class='texttt'>Reference</span></span></a> R,
|
||
<a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf_______'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></span> Rep <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdRep<span class='anglebracket'>></span><span class='anglebracket'>></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'><</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'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span><span class='operator'>&</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'>​::​</span>forward<span class='anglebracket'><</span>FwdRep<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference_________________________'><span class='texttt'>Reference</span></span></a> R, <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span><span class='operator'>&</span> q, R<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference__________________________'><span class='texttt'>Reference</span></span></a> R, <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span><span class='operator'>&</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'><</span>FwdQ<span class='anglebracket'>></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'><</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference___________________________'><span class='texttt'>Reference</span></span></a> R, <span class='keyword'>typename</span> Rep<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'><</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>Rep<span class='anglebracket'>></span>, get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></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'>&</span><span class='operator'>&</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference____________________________'><span class='texttt'>Reference</span></span></a> R, <span class='keyword'>typename</span> Rep<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf_________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'><</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>Rep<span class='anglebracket'>></span>, get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></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'>&</span><span class='operator'>&</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference_____________________________'><span class='texttt'>Reference</span></span></a> R, <span class='keyword'>typename</span> Q<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity___________________________'><span class='texttt'>Quantity</span></span></a><span class='anglebracket'><</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>Q<span class='anglebracket'>></span><span class='anglebracket'>></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'>&</span><span class='operator'>&</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference______________________________'><span class='texttt'>Reference</span></span></a> R, <span class='keyword'>typename</span> Q<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity____________________________'><span class='texttt'>Quantity</span></span></a><span class='anglebracket'><</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>Q<span class='anglebracket'>></span><span class='anglebracket'>></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'>&</span><span class='operator'>&</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'><</span><span class='keyword'>typename</span> Q2, <span class='keyword'>typename</span> U2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>reference, reference<span class='anglebracket'><</span>Q2, U2<span class='anglebracket'>></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'>&</span><span class='operator'>&</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'><</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit_____________________________'><span class='texttt'>AssociatedUnit</span></span></a> U2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>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'>&</span><span class='operator'>&</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'><</span><span class='keyword'>typename</span> Q2, <span class='keyword'>typename</span> U2<span class='anglebracket'>></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'><</span>Q2, U2<span class='anglebracket'>></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'>&</span><span class='operator'>&</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'><</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit______________________________'><span class='texttt'>AssociatedUnit</span></span></a> U2<span class='anglebracket'>></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'>&</span><span class='operator'>&</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'><</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit_______________________________'><span class='texttt'>AssociatedUnit</span></span></a> U1<span class='anglebracket'>></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'>&</span><span class='operator'>&</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'><</span><span class='keyword'>typename</span> Q, <span class='keyword'>typename</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec________________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> get_quantity_spec<span class='parenthesis'>(</span>reference<span class='anglebracket'><</span>Q, U<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> Q, <span class='keyword'>typename</span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> get_unit<span class='parenthesis'>(</span>reference<span class='anglebracket'><</span>Q, U<span class='anglebracket'>></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 Concepts [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 Observers [qty.ref.obs]'>get_common_reference</a></span><span class='parenthesis'>(</span><a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit_________________________________'><span class='texttt'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> u1,
|
||
<a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit__________________________________'><span class='texttt'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span> u2,
|
||
<a href='#concept:AssociatedUnit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:AssociatedUnit___________________________________'><span class='texttt'>AssociatedUnit</span></span></a> <span class='keyword'>auto</span><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'>></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'><</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference_______________________________'><span class='texttt'>Reference</span></span></a> R1, <a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference________________________________'><span class='texttt'>Reference</span></span></a> R2, <a href='#concept:Reference' title='5.4.5 Concepts [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'>></span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:Reference' title='5.4.5 Concepts [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 Observers [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'><</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'>></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 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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span>T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='operator'>!</span>std<span class='operator'>::</span>is_array_v<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</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'><</span>T<span class='anglebracket'>></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'><</span>T<span class='anglebracket'>></span> <span class='operator'>:</span> std<span class='operator'>::</span>indirectly_readable_traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='curlybracket'>{</span><span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>value_type;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Rep<span class='anglebracket'>></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 Floating-point [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'><</span><span class='texttt'><i >actual-value-type-t</i></span><span class='anglebracket'><</span>Rep<span class='anglebracket'>></span><span class='anglebracket'>></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 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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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 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 <a href='#qty.char.traits-note-1'>1</a></i>: <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> — <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'><</span><span class='keyword'>typename</span> Rep<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> <span id='lib:representation_values'><a class='hidden_link' href='#lib:representation_values' title='5.5.2.3 Values [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'><</span>Rep<span class='anglebracket'>></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'>​::​</span>chrono<span class='operator'>​::​</span>duration_<span class='shy'></span>values<span class='anglebracket'><</span>Rep<span class='anglebracket'>></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'><</span>Rep<span class='anglebracket'>></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 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​::​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'>​::​</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 Concepts [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'>​::​</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 Concepts [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'>​::​</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 Concepts [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'>​::​</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'>​::​</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​::​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'>​::​</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 Concepts [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'>​::​</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 Concepts [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'>​::​</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 Concepts [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'>​::​</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'>​::​</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​::​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'>​::​</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 Concepts [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'>​::​</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 Concepts [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'>​::​</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 Concepts [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'>​::​</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 Concepts [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'>​::​</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 Concepts [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'>​::​</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'>​::​</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​::​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'>​::​</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 Concepts [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'>​::​</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 Concepts [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'>​::​</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 Concepts [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'>​::​</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 Concepts [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'>​::​</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>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 Concepts [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'>​::​</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'>​::​</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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> std<span class='operator'>::</span>equality_comparable<span class='anglebracket'><</span>T<span class='anglebracket'>></span>; <span class='comment'>// <i >exposition only</i></span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >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'><</span>T<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:WeaklyRegular____'></a><span class='texttt'><i >WeaklyRegular</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</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'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> a <span class='operator'>+</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> a <span class='operator'>-</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> a <span class='operator'>*</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> a <span class='operator'>/</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span>T<span class='anglebracket'>></span>; <span class='comment'>// <i >exposition only</i>, see <a href='#qty.fp.traits' title='5.5.2.1 Floating-point'>[qty.<span class='shy'></span>fp.<span class='shy'></span>traits]</a></span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >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'><</span>T<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:WeaklyRegular_____'></a><span class='texttt'><i >WeaklyRegular</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:Scalar____________'></a><span class='texttt'><i >Scalar</i></span><span class='anglebracket'><</span><span class='texttt'><i >value-type-t</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</span>T, <span class='texttt'><i >value-type-t</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></span>, <span class='texttt'><i >value-type-t</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</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'><</span>T<span class='anglebracket'>></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'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> a <span class='operator'>+</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> a <span class='operator'>-</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> a <span class='operator'>*</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> a <span class='operator'>/</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> a <span class='operator'>*</span> s <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> s <span class='operator'>*</span> a <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> a <span class='operator'>/</span> s <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span>T<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:WeaklyRegular______'></a><span class='texttt'><i >WeaklyRegular</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:Scalar_____________'></a><span class='texttt'><i >Scalar</i></span><span class='anglebracket'><</span><span class='texttt'><i >value-type-t</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</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'><</span>T<span class='anglebracket'>></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'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> a <span class='operator'>+</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> a <span class='operator'>-</span> b <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> a <span class='operator'>*</span> s <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> s <span class='operator'>*</span> a <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> a <span class='operator'>/</span> s <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span>treat_as_floating_point<span class='anglebracket'><</span>T<span class='anglebracket'>></span>, <span class='keyword'>long</span> <span class='keyword'>double</span>, std<span class='operator'>::</span>intmax_t<span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <span class='texttt'><i >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'><</span>T, quantity<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:Scalar______________'></a><span class='texttt'><i >Scalar</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</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'><</span>T<span class='anglebracket'>></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'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> f <span class='operator'>*</span> a <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> a <span class='operator'>/</span> f <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span>T, quantity<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:Complex'></a><span class='texttt'><i >Complex</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</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'><</span>T<span class='anglebracket'>></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'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></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'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></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'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span>T, quantity<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:Vector'></a><span class='texttt'><i >Vector</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:Representation' title='5.5.4 Concepts [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'><</span>T<span class='anglebracket'>></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'><</span>T<span class='anglebracket'>></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'><</span>T<span class='anglebracket'>></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 Concepts [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'><</span><span class='keyword'>typename</span> T, quantity_character Ch<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:Scalar_______________'></a><span class='texttt'><i >Scalar</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:Complex_'></a><span class='texttt'><i >Complex</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:Vector_'></a><span class='texttt'><i >Vector</i></span><span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> V<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:RepresentationOf' title='5.5.4 Concepts [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 Concepts [qty.rep.concepts]'><span id='conceptref:Representation_________'><span class='texttt'>Representation</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span><span class='parenthesis'>(</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_________________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>V<span class='parenthesis'>)</span><span class='anglebracket'>></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'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>V<span class='parenthesis'>)</span><span class='anglebracket'>></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'><</span>T, V<span class='operator'>.</span>character<span class='anglebracket'>></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'><</span>quantity_character, <span class='keyword'>decltype</span><span class='parenthesis'>(</span>V<span class='parenthesis'>)</span><span class='anglebracket'>></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'><</span>T, V<span class='anglebracket'>></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 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf__________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'><</span>V<span class='anglebracket'>></span></span> if
|
||
<span class='texttt'>T</span> models <a href='#concept:Representation' title='5.5.4 Concepts [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 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 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 <a href='#qty.like-note-1'>1</a></i>: <div id='qty.like-1.sentence-2' class='sentence'><a href='#qty.chrono' title='5.9 std​::​chrono interoperability'>[qty.<span class='shy'></span>chrono]</a> implements them for <span class='texttt'>std<span class='operator'>​::​</span>chrono<span class='operator'>​::​</span>duration</span> and <span class='texttt'>std<span class='operator'>​::​</span>chrono<span class='operator'>​::​</span>time_<span class='shy'></span>point</span><a class='hidden_link' href='#qty.like-1.sentence-2'>.</a></div> — <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'><</span><span class='keyword'>typename</span> T, <span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span><span class='anglebracket'>></span> <span class='keyword'>typename</span> Traits<span class='anglebracket'>></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'>&</span> qty, <span class='keyword'>const</span> Traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>rep<span class='operator'>&</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'><</span>T<span class='anglebracket'>></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'>></span> std<span class='operator'>::</span>same_as<span class='anglebracket'><</span><span class='keyword'>typename</span> Traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>rep<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>{</span> Traits<span class='anglebracket'><</span>T<span class='anglebracket'>></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'>></span> std<span class='operator'>::</span>same_as<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
||
<span class='keyword'>requires</span> std<span class='operator'>::</span>same_as<span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>Traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>explicit_import<span class='parenthesis'>)</span>, <span class='keyword'>const</span> <span class='keyword'>bool</span><span class='anglebracket'>></span>;
|
||
<span class='keyword'>requires</span> std<span class='operator'>::</span>same_as<span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>Traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>explicit_export<span class='parenthesis'>)</span>, <span class='keyword'>const</span> <span class='keyword'>bool</span><span class='anglebracket'>></span>;
|
||
<span class='keyword'>typename</span> std<span class='operator'>::</span>bool_constant<span class='anglebracket'><</span>Traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>explicit_import<span class='anglebracket'>></span>;
|
||
<span class='keyword'>typename</span> std<span class='operator'>::</span>bool_constant<span class='anglebracket'><</span>Traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>explicit_export<span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:QuantityLike' title='5.6.2 Interoperability [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 Class template quantity [qty.syn]'><span id='conceptref:Quantity_____________________________'><span class='texttt'>Quantity</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:qty-like-impl'></a><span class='texttt'><i >qty-like-impl</i></span><span class='anglebracket'><</span>T, quantity_like_traits<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='keyword'>requires</span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>typename</span> quantity<span class='anglebracket'><</span>quantity_like_traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>reference, <span class='keyword'>typename</span> quantity_like_traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>rep<span class='anglebracket'>></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'><</span>Q<span class='anglebracket'>></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'><</span>Q<span class='anglebracket'>></span><span class='operator'>​::​</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'><</span>Traits<span class='anglebracket'>></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'><</span>Q<span class='anglebracket'>></span><span class='operator'>​::​</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'><</span>Q<span class='anglebracket'>></span><span class='operator'>​::​</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'><</span>Q<span class='anglebracket'>></span><span class='operator'>​::​</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'><</span>Q<span class='anglebracket'>></span><span class='operator'>​::​</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'><</span>Q<span class='anglebracket'>></span><span class='operator'>​::​</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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:Quantity' title='5.6.3 Class template quantity [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'><</span>T, quantity<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> Q, <span class='keyword'>auto</span> QS<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:QuantityOf' title='5.6.3 Class template quantity [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 Class template quantity [qty.syn]'><span id='conceptref:Quantity______________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'><</span>Q<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:QuantitySpecOf' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpecOf_'><span class='tcode_in_codeblock'>QuantitySpecOf</span></span></a><span class='anglebracket'><</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'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> UFrom, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> UTo<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></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'><</span>T<span class='anglebracket'>></span>; <span class='comment'>// <i >exposition only</i></span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</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'>></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 Concepts [qty.rep.concepts]'><span id='conceptref:Representation___________'><span class='tcode_in_codeblock'>Representation</span></span></a><span class='anglebracket'><</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FromRep<span class='anglebracket'>></span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation____________'><span class='tcode_in_codeblock'>Representation</span></span></a><span class='anglebracket'><</span>ToRep<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>FromUnit<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>ToUnit<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> std<span class='operator'>::</span>assignable_from<span class='anglebracket'><</span>ToRep<span class='operator'>&</span>, FromRep<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<span class='parenthesis'>(</span><i >IsFloatingPoint</i><span class='anglebracket'><</span>ToRep<span class='anglebracket'>></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'><</span>std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FromRep<span class='anglebracket'>></span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</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'><</span><span class='keyword'>typename</span> QFrom, <span class='keyword'>typename</span> QTo<span class='anglebracket'>></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 Class template quantity [qty.syn]'><span id='conceptref:Quantity_______________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'><</span>QFrom<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'><</span>QTo<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:QuantitySpecConvertibleTo____'></a><i >QuantitySpecConvertibleTo</i><span class='anglebracket'><</span>QFrom<span class='operator'>::</span>quantity_spec, QTo<span class='operator'>::</span>quantity_spec<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:UnitConvertibleTo_'></a><i >UnitConvertibleTo</i><span class='anglebracket'><</span>QFrom<span class='operator'>::</span>unit, QTo<span class='operator'>::</span>unit<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<i >ValuePreservingTo</i><span class='anglebracket'><</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'>></span> <span class='operator'>&</span><span class='operator'>&</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'><</span>QTo<span class='anglebracket'>></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 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'><</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'>></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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec__________________________________________________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>QS<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> std<span class='operator'>::</span>regular_invocable<span class='anglebracket'><</span>Func, T, U<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf___________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>std<span class='operator'>::</span>invoke_result_t<span class='anglebracket'><</span>Func, T, U<span class='anglebracket'>></span>, QS<span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</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'><</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'>></span><span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________________________________________________________________________'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>QS<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity_________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'><</span>Q1<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity__________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'><</span>Q2<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf'></a><i >InvokeResultOf</i><span class='anglebracket'><</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'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>auto</span> R1, <span class='keyword'>auto</span> R2<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> Func, Quantity Q1, Quantity Q2<span class='anglebracket'>></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'><</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'><</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'>></span><span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Func, <span class='keyword'>typename</span> Q1, <span class='keyword'>typename</span> Q2<span class='anglebracket'>></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 Class template quantity [qty.syn]'><span id='conceptref:Quantity___________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'><</span>Q1<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity____________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'><</span>Q2<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:HaveCommonReference'></a><i >HaveCommonReference</i><span class='anglebracket'><</span>Q1<span class='operator'>::</span>reference, Q2<span class='operator'>::</span>reference<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
std<span class='operator'>::</span>convertible_to<span class='anglebracket'><</span>Q1, <i >common-quantity-for</i><span class='anglebracket'><</span>Func, Q1, Q2<span class='anglebracket'>></span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
std<span class='operator'>::</span>convertible_to<span class='anglebracket'><</span>Q2, <i >common-quantity-for</i><span class='anglebracket'><</span>Func, Q1, Q2<span class='anglebracket'>></span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvocableQuantities'></a><i >InvocableQuantities</i><span class='anglebracket'><</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'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</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'>></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'>&</span><span class='operator'>&</span> std<span class='operator'>::</span>convertible_to<span class='anglebracket'><</span>Rep1, Rep2<span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>using</span> <i >quantity-like-type</i> <span class='operator'>=</span> <span class='comment'>// <i >exposition only</i></span>
|
||
quantity<span class='anglebracket'><</span>quantity_like_traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>reference, <span class='keyword'>typename</span> quantity_like_traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>rep<span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</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'><</span>T<span class='anglebracket'>></span><span class='anglebracket'>></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'><</span>TT<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>TT, U<span class='anglebracket'>></span>; <span class='comment'>// <i >exposition only</i></span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Reference' title='5.4.5 Concepts [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 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf____________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='anglebracket'>></span> Rep <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>class</span> <span id='lib:quantity'><a class='hidden_link' href='#lib:quantity' title='5.6.3 Class template quantity [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 Concepts [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 Concepts [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 Concepts [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 Concepts [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 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 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'>&</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>;
|
||
quantity<span class='parenthesis'>(</span>quantity<span class='operator'>&</span><span class='operator'>&</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'><</span><span class='keyword'>typename</span> FwdValue, <a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference_____________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a> R2<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:SameValueAs'></a><i >SameValueAs</i><span class='anglebracket'><</span>R2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, R, std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdValue<span class='anglebracket'>></span>, Rep<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> quantity<span class='parenthesis'>(</span>FwdValue<span class='operator'>&</span><span class='operator'>&</span> v, R2<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> FwdValue, <a href='#concept:Reference' title='5.4.5 Concepts [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'><</span>FwdValue<span class='anglebracket'>></span><span class='anglebracket'>></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'><</span>R2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, R, Value, Rep<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:QuantityConvertibleTo'></a><i >QuantityConvertibleTo</i><span class='anglebracket'><</span>quantity<span class='anglebracket'><</span>R2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Value<span class='anglebracket'>></span>, quantity<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> quantity<span class='parenthesis'>(</span>FwdValue<span class='operator'>&</span><span class='operator'>&</span> v, R2<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:ValuePreservingTo'></a><i >ValuePreservingTo</i><span class='anglebracket'><</span>Rep<span class='anglebracket'>></span> FwdValue<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> v<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:QuantityConvertibleTo_'></a><i >QuantityConvertibleTo</i><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q<span class='anglebracket'>></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'>&</span> q<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:QuantityLike' title='5.6.2 Interoperability [qty.like]'><span id='conceptref:QuantityLike'><span class='tcode_in_codeblock'>QuantityLike</span></span></a> Q<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo__'></a><i >QuantityConvertibleTo</i><span class='anglebracket'><</span><i >quantity-like-type</i><span class='anglebracket'><</span>Q<span class='anglebracket'>></span>, quantity<span class='anglebracket'>></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'>&</span> q<span class='parenthesis'>)</span>;
|
||
|
||
quantity<span class='operator'>&</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> quantity<span class='operator'>&</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>;
|
||
quantity<span class='operator'>&</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>quantity<span class='operator'>&</span><span class='operator'>&</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:ValuePreservingTo_'></a><i >ValuePreservingTo</i><span class='anglebracket'><</span>Rep<span class='anglebracket'>></span> FwdValue<span class='anglebracket'>></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'>&</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>FwdValue<span class='operator'>&</span><span class='operator'>&</span> v<span class='parenthesis'>)</span>;
|
||
|
||
<span class='comment'>// <a href='#qty.conv' title='5.6.6 Conversions'>[qty.<span class='shy'></span>conv]</a>, conversions</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:UnitCompatibleWith'></a><i >UnitCompatibleWith</i><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> ToU<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo___'></a><i >QuantityConvertibleTo</i><span class='anglebracket'><</span>quantity, quantity<span class='anglebracket'><</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'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span><a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf_____________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> ToRep<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo____'></a><i >QuantityConvertibleTo</i><span class='anglebracket'><</span>quantity, quantity<span class='anglebracket'><</span>reference, ToRep<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf_'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span><a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf______________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> ToRep,
|
||
<a class='index' id='conceptref:UnitCompatibleWith_'></a><i >UnitCompatibleWith</i><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> ToU<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo_____'></a><i >QuantityConvertibleTo</i><span class='anglebracket'><</span>quantity,
|
||
quantity<span class='anglebracket'><</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'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf__'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span><a class='index' id='conceptref:UnitCompatibleWith__'></a><i >UnitCompatibleWith</i><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> ToU<span class='anglebracket'>></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'><</span>ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></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 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf___'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span><a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf_______________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> ToRep<span class='anglebracket'>></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'><</span>ToRep<span class='anglebracket'>></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 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf____'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span><a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> ToRep,
|
||
<a class='index' id='conceptref:UnitCompatibleWith___'></a><i >UnitCompatibleWith</i><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> ToU<span class='anglebracket'>></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'><</span>ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, ToRep<span class='anglebracket'>></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 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf_____'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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 Numerical value observers'>[qty.<span class='shy'></span>obs]</a>, numerical value observers</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_____________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>></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'>&</span> numerical_value_ref_in<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span> <span class='operator'>&</span> <span class='keyword'>noexcept</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>></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'>&</span> numerical_value_ref_in<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='operator'>&</span> <span class='keyword'>noexcept</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:UnitCompatibleWith____'></a><i >UnitCompatibleWith</i><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo______'></a><i >QuantityConvertibleTo</i><span class='anglebracket'><</span>quantity, quantity<span class='anglebracket'><</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'>></span><span class='anglebracket'>></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'><</span><a class='index' id='conceptref:UnitCompatibleWith_____'></a><i >UnitCompatibleWith</i><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> U<span class='anglebracket'>></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'><</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></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 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'><</span><span class='keyword'>typename</span> V_, std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</span>Rep<span class='anglebracket'>></span> Value <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>V_<span class='anglebracket'>></span><span class='anglebracket'>></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'>&</span> <span class='keyword'>noexcept</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Q_, <a href='#concept:QuantityLike' title='5.6.2 Interoperability [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'><</span>Q_<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo_______'></a><i >QuantityConvertibleTo</i><span class='anglebracket'><</span>quantity, <i >quantity-like-type</i><span class='anglebracket'><</span>Q<span class='anglebracket'>></span><span class='anglebracket'>></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 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 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf______'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf_______'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span><a class='index' id='conceptref:Mutable'></a><i >Mutable</i><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q<span class='anglebracket'>></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'>&</span><span class='operator'>&</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'><</span><a class='index' id='conceptref:Mutable_'></a><i >Mutable</i><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q<span class='anglebracket'>></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'>&</span><span class='operator'>&</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 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf_________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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 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'><</span><a class='index' id='conceptref:Mutable__'></a><i >Mutable</i><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:Mutable___'></a><i >Mutable</i><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:Mutable____'></a><i >Mutable</i><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:Mutable_____'></a><i >Mutable</i><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a class='index' id='conceptref:ValuePreservingTo__'></a><i >ValuePreservingTo</i><span class='anglebracket'><</span>Rep<span class='anglebracket'>></span> Value<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:Mutable______'></a><i >Mutable</i><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a class='index' id='conceptref:ValuePreservingTo___'></a><i >ValuePreservingTo</i><span class='anglebracket'><</span>Rep<span class='anglebracket'>></span> Value<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:Mutable_______'></a><i >Mutable</i><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf__________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>dimensionless<span class='anglebracket'>></span> Q2<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> lhs, <span class='keyword'>const</span> Q2<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:Mutable________'></a><i >Mutable</i><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf___________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>dimensionless<span class='anglebracket'>></span> Q2<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> lhs, <span class='keyword'>const</span> Q2<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='comment'>// <a href='#qty.arith.ops' title='5.6.11 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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:CommonlyInvocableQuantities'></a><i >CommonlyInvocableQuantities</i><span class='anglebracket'><</span>std<span class='operator'>::</span>plus<span class='anglebracket'><</span><span class='anglebracket'>></span>, quantity, quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:CommonlyInvocableQuantities_'></a><i >CommonlyInvocableQuantities</i><span class='anglebracket'><</span>std<span class='operator'>::</span>minus<span class='anglebracket'><</span><span class='anglebracket'>></span>, quantity, quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>treat_as_floating_point<span class='anglebracket'><</span>Rep<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span><span class='operator'>!</span>treat_as_floating_point<span class='anglebracket'><</span>Rep2<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:CommonlyInvocableQuantities__'></a><i >CommonlyInvocableQuantities</i><span class='anglebracket'><</span>std<span class='operator'>::</span>modulus<span class='anglebracket'><</span><span class='anglebracket'>></span>, quantity, quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation_____________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>></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'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf_'></a><i >InvokeResultOf</i><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>plus<span class='anglebracket'><</span><span class='anglebracket'>></span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation______________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>></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'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf__'></a><i >InvokeResultOf</i><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>minus<span class='anglebracket'><</span><span class='anglebracket'>></span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation_______________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>></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'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf___'></a><i >InvokeResultOf</i><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>modulus<span class='anglebracket'><</span><span class='anglebracket'>></span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation________________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>></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'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf____'></a><i >InvokeResultOf</i><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>plus<span class='anglebracket'><</span><span class='anglebracket'>></span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation_________________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>></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'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf_____'></a><i >InvokeResultOf</i><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>minus<span class='anglebracket'><</span><span class='anglebracket'>></span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation__________________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>></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'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf______'></a><i >InvokeResultOf</i><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>modulus<span class='anglebracket'><</span><span class='anglebracket'>></span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:InvocableQuantities_'></a><i >InvocableQuantities</i><span class='anglebracket'><</span>std<span class='operator'>::</span>multiplies<span class='anglebracket'><</span><span class='anglebracket'>></span>, quantity, quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:InvocableQuantities__'></a><i >InvocableQuantities</i><span class='anglebracket'><</span>std<span class='operator'>::</span>divides<span class='anglebracket'><</span><span class='anglebracket'>></span>, quantity, quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>typename</span> Value<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'><</span>Value<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference_______________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a><span class='anglebracket'><</span>Value<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf_______'></a><i >InvokeResultOf</i><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>multiplies<span class='anglebracket'><</span><span class='anglebracket'>></span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf____________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>typename</span> Value<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity_________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'><</span>Value<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference________________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a><span class='anglebracket'><</span>Value<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf________'></a><i >InvokeResultOf</i><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>divides<span class='anglebracket'><</span><span class='anglebracket'>></span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf_____________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Value, std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity__________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'><</span>Value<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference_________________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a><span class='anglebracket'><</span>Value<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf_________'></a><i >InvokeResultOf</i><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>multiplies<span class='anglebracket'><</span><span class='anglebracket'>></span>, <span class='keyword'>const</span> Value<span class='operator'>&</span>, Rep<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf______________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'>&</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Value, std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity___________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'><</span>Value<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference__________________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a><span class='anglebracket'><</span>Value<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf__________'></a><i >InvokeResultOf</i><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>divides<span class='anglebracket'><</span><span class='anglebracket'>></span>, <span class='keyword'>const</span> Value<span class='operator'>&</span>, Rep<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span>, <span class='keyword'>const</span> Q<span class='operator'>&</span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='comment'>// <a href='#qty.cmp' title='5.6.12 Comparison'>[qty.<span class='shy'></span>cmp]</a>, comparison</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></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'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></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'><</span><span class='operator'>=</span><span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation___________________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>></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'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation____________________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>></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'><</span><span class='operator'>=</span><span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
|
||
<span class='comment'>// <a href='#qty.val.cmp' title='5.6.13 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'>&</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'>&</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'>&</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'>&</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'>&</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'>&</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'><</span><a href='#concept:Representation' title='5.5.4 Concepts [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 Concepts [qty.ref.concepts]'><span id='conceptref:Reference___________________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a> R<span class='anglebracket'>></span>
|
||
quantity<span class='parenthesis'>(</span>Value, R<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>></span> quantity<span class='anglebracket'><</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Value<span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation______________________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>></span>
|
||
quantity<span class='parenthesis'>(</span>Value<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>></span> quantity<span class='anglebracket'><</span>one, Value<span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:QuantityLike' title='5.6.2 Interoperability [qty.like]'><span id='conceptref:QuantityLike__'><span class='tcode_in_codeblock'>QuantityLike</span></span></a> Q<span class='anglebracket'>></span>
|
||
<span class='keyword'>explicit</span><span class='parenthesis'>(</span>quantity_like_traits<span class='anglebracket'><</span>Q<span class='anglebracket'>></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'>></span> quantity<span class='anglebracket'><</span>quantity_like_traits<span class='anglebracket'><</span>Q<span class='anglebracket'>></span><span class='operator'>::</span>reference, <span class='keyword'>typename</span> quantity_like_traits<span class='anglebracket'><</span>Q<span class='anglebracket'>></span><span class='operator'>::</span>rep<span class='anglebracket'>></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'><</span>R, Rep<span class='anglebracket'>></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'><</span>rep<span class='anglebracket'>></span><span class='operator'>​::​</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'><</span>rep<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> FwdValue, <a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference____________________________________________'><span class='texttt'>Reference</span></span></a> R2<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:SameValueAs__'></a><span class='texttt'><i >SameValueAs</i></span><span class='anglebracket'><</span>R2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, R, std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdValue<span class='anglebracket'>></span>, Rep<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> quantity<span class='parenthesis'>(</span>FwdValue<span class='operator'>&</span><span class='operator'>&</span> v, R2<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:ValuePreservingTo____'></a><span class='texttt'><i >ValuePreservingTo</i></span><span class='anglebracket'><</span>Rep<span class='anglebracket'>></span> FwdValue<span class='anglebracket'>></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'>&</span><span class='operator'>&</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'>​::​</span>forward<span class='anglebracket'><</span>FwdValue<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> FwdValue, <a href='#concept:Reference' title='5.4.5 Concepts [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'><</span>FwdValue<span class='anglebracket'>></span><span class='anglebracket'>></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'><</span>R2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, R, Value, Rep<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:QuantityConvertibleTo________'></a><span class='texttt'><i >QuantityConvertibleTo</i></span><span class='anglebracket'><</span>quantity<span class='anglebracket'><</span>R2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Value<span class='anglebracket'>></span>, quantity<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> quantity<span class='parenthesis'>(</span>FwdValue<span class='operator'>&</span><span class='operator'>&</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'><</span>R2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Value<span class='anglebracket'>></span><span class='curlybracket'>{</span>std<span class='operator'>​::​</span>forward<span class='anglebracket'><</span>FwdValue<span class='anglebracket'>></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'><</span><a class='index' id='conceptref:QuantityConvertibleTo_________'></a><span class='texttt'><i >QuantityConvertibleTo</i></span><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> Q<span class='operator'>::</span>rep, Rep<span class='anglebracket'>></span><span class='parenthesis'>)</span> quantity<span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&</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'><</span>quantity<span class='anglebracket'>></span><span class='parenthesis'>(</span>q<span class='parenthesis'>)</span></span> (<a href='#qty.non.mem.conv' title='5.6.15 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'><</span><a href='#concept:QuantityLike' title='5.6.2 Interoperability [qty.like]'><span id='conceptref:QuantityLike___'><span class='texttt'>QuantityLike</span></span></a> Q<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo__________'></a><span class='texttt'><i >QuantityConvertibleTo</i></span><span class='anglebracket'><</span><span class='texttt'><i >quantity-like-type</i></span><span class='anglebracket'><</span>Q<span class='anglebracket'>></span>, quantity<span class='anglebracket'>></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'>&</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'><</span>Q<span class='anglebracket'>></span><span class='operator'>::</span>to_numerical_value<span class='parenthesis'>(</span>q<span class='parenthesis'>)</span>,
|
||
quantity_like_traits<span class='anglebracket'><</span>Q<span class='anglebracket'>></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'><</span>Q<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> quantity_like_traits<span class='anglebracket'><</span>Q<span class='anglebracket'>></span><span class='operator'>::</span>rep, Rep<span class='anglebracket'>></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'><</span><a class='index' id='conceptref:ValuePreservingTo_____'></a><span class='texttt'><i >ValuePreservingTo</i></span><span class='anglebracket'><</span>Rep<span class='anglebracket'>></span> FwdValue<span class='anglebracket'>></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'>&</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>FwdValue<span class='operator'>&</span><span class='operator'>&</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'>​::​</span>forward<span class='anglebracket'><</span>FwdValue<span class='anglebracket'>></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'><</span><a class='index' id='conceptref:UnitCompatibleWith______'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> ToU<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo___________'></a><span class='texttt'><i >QuantityConvertibleTo</i></span><span class='anglebracket'><</span>quantity, quantity<span class='anglebracket'><</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'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf_______________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</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'>></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'><</span><a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf_________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> ToRep<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo____________'></a><span class='texttt'><i >QuantityConvertibleTo</i></span><span class='anglebracket'><</span>quantity, quantity<span class='anglebracket'><</span>reference, ToRep<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span>reference, ToRep<span class='anglebracket'>></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'><</span><a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf__________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> ToRep,
|
||
<a class='index' id='conceptref:UnitCompatibleWith_______'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> ToU<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo_____________'></a><span class='texttt'><i >QuantityConvertibleTo</i></span><span class='anglebracket'><</span>quantity,
|
||
quantity<span class='anglebracket'><</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'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf_________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</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'>></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'><</span><a class='index' id='conceptref:UnitCompatibleWith________'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> ToU<span class='anglebracket'>></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'><</span>ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></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 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf__________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span>ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></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'><</span><a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf___________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> ToRep<span class='anglebracket'>></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'><</span>ToRep<span class='anglebracket'>></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 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf___________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span>ToRep<span class='anglebracket'>></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'><</span><a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf____________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> ToRep,
|
||
<a class='index' id='conceptref:UnitCompatibleWith_________'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> ToU<span class='anglebracket'>></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'><</span>ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, ToRep<span class='anglebracket'>></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 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf____________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span>ToU<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, ToRep<span class='anglebracket'>></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'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>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'>&</span> numerical_value_ref_in<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span> <span class='operator'>&</span> <span class='keyword'>noexcept</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_________________________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> U<span class='anglebracket'>></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'>&</span> numerical_value_ref_in<span class='parenthesis'>(</span>U<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='operator'>&</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'><</span><a class='index' id='conceptref:UnitCompatibleWith__________'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> U<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo______________'></a><span class='texttt'><i >QuantityConvertibleTo</i></span><span class='anglebracket'><</span>quantity, quantity<span class='anglebracket'><</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'>></span><span class='anglebracket'>></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'><</span><a class='index' id='conceptref:UnitCompatibleWith___________'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> U<span class='anglebracket'>></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'><</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> V_, std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</span>Rep<span class='anglebracket'>></span> Value <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>V_<span class='anglebracket'>></span><span class='anglebracket'>></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'>&</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'><</span><span class='keyword'>typename</span> Q_, <a href='#concept:QuantityLike' title='5.6.2 Interoperability [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'><</span>Q_<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantityConvertibleTo_______________'></a><span class='texttt'><i >QuantityConvertibleTo</i></span><span class='anglebracket'><</span>quantity, <span class='texttt'><i >quantity-like-type</i></span><span class='anglebracket'><</span>Q<span class='anglebracket'>></span><span class='anglebracket'>></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'><</span>Q<span class='anglebracket'>></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'><</span>Q<span class='anglebracket'>></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'><</span>Q<span class='anglebracket'>></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'><</span>Rep, <span class='keyword'>typename</span> quantity_like_traits<span class='anglebracket'><</span>Q<span class='anglebracket'>></span><span class='operator'>::</span>rep<span class='anglebracket'>></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'><</span>Q<span class='anglebracket'>></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'>&</span><span class='operator'>&</span>
|
||
std<span class='operator'>::</span>is_nothrow_copy_constructible_v<span class='anglebracket'><</span>rep<span class='anglebracket'>></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 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf_____________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf______________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'>​::​</span>mp_<span class='shy'></span>units<span class='operator'>​::​</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'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>rep<span class='anglebracket'>></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'><</span><a class='index' id='conceptref:Mutable_________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q<span class='anglebracket'>></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'>&</span><span class='operator'>&</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'><</span><a class='index' id='conceptref:Mutable__________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q<span class='anglebracket'>></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'>&</span><span class='operator'>&</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'>​::​</span>forward<span class='anglebracket'><</span>Q<span class='anglebracket'>></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'>&</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'>></span> std<span class='operator'>::</span>same_as<span class='anglebracket'><</span>rep<span class='operator'>&</span><span class='anglebracket'>></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 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf_______________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'>​::​</span>mp_<span class='shy'></span>units<span class='operator'>​::​</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'>&</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'>></span> std<span class='operator'>::</span>common_with<span class='anglebracket'><</span>rep<span class='anglebracket'>></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'><</span><a class='index' id='conceptref:Mutable___________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:Mutable____________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:Mutable_____________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</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'>​::​</span>forward<span class='anglebracket'><</span>Q<span class='anglebracket'>></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'><</span>rep<span class='anglebracket'>></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'><</span>quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span>, quantity<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <i >C</i> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>rep<span class='operator'>&</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'>></span> std<span class='operator'>::</span>same_as<span class='anglebracket'><</span>rep<span class='operator'>&</span><span class='anglebracket'>></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'><</span><a class='index' id='conceptref:Mutable______________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a class='index' id='conceptref:ValuePreservingTo______'></a><span class='texttt'><i >ValuePreservingTo</i></span><span class='anglebracket'><</span>Rep<span class='anglebracket'>></span> Value<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:Mutable_______________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a class='index' id='conceptref:ValuePreservingTo_______'></a><span class='texttt'><i >ValuePreservingTo</i></span><span class='anglebracket'><</span>Rep<span class='anglebracket'>></span> Value<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</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'><</span>Value<span class='anglebracket'>></span><span class='operator'>​::​</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'>​::​</span>forward<span class='anglebracket'><</span>Q<span class='anglebracket'>></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 Class template quantity [qty.syn]'><span id='conceptref:Quantity_____________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a><span class='anglebracket'><</span>Value<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <span class='keyword'>requires</span><span class='parenthesis'>(</span>rep<span class='operator'>&</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'>></span> std<span class='operator'>::</span>same_as<span class='anglebracket'><</span>rep<span class='operator'>&</span><span class='anglebracket'>></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'><</span><a class='index' id='conceptref:Mutable________________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf_________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>dimensionless<span class='anglebracket'>></span> Q2<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> lhs, <span class='keyword'>const</span> Q2<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:Mutable_________________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf__________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>dimensionless<span class='anglebracket'>></span> Q2<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> lhs, <span class='keyword'>const</span> Q2<span class='operator'>&</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'>​::​</span>forward<span class='anglebracket'><</span>Q<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:ValuePreservingTo________'></a><i >ValuePreservingTo</i><span class='anglebracket'><</span><span class='keyword'>typename</span> Q2<span class='operator'>::</span>rep, Rep<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span>rep<span class='operator'>&</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'>></span> std<span class='operator'>::</span>same_as<span class='anglebracket'><</span>rep<span class='operator'>&</span><span class='anglebracket'>></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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:CommonlyInvocableQuantities___'></a><span class='texttt'><i >CommonlyInvocableQuantities</i></span><span class='anglebracket'><</span>std<span class='operator'>::</span>plus<span class='anglebracket'><</span><span class='anglebracket'>></span>, quantity, quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:CommonlyInvocableQuantities____'></a><span class='texttt'><i >CommonlyInvocableQuantities</i></span><span class='anglebracket'><</span>std<span class='operator'>::</span>minus<span class='anglebracket'><</span><span class='anglebracket'>></span>, quantity, quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span>treat_as_floating_point<span class='anglebracket'><</span>Rep<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span><span class='operator'>!</span>treat_as_floating_point<span class='anglebracket'><</span>Rep2<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:CommonlyInvocableQuantities_____'></a><span class='texttt'><i >CommonlyInvocableQuantities</i></span><span class='anglebracket'><</span>std<span class='operator'>::</span>modulus<span class='anglebracket'><</span><span class='anglebracket'>></span>, quantity, quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</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'><</span><i >F</i>, quantity, quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='anglebracket'>></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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation_______________________'><span class='texttt'>Representation</span></span></a> Value<span class='anglebracket'>></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'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf___________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>plus<span class='anglebracket'><</span><span class='anglebracket'>></span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation________________________'><span class='texttt'>Representation</span></span></a> Value<span class='anglebracket'>></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'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf____________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>minus<span class='anglebracket'><</span><span class='anglebracket'>></span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation_________________________'><span class='texttt'>Representation</span></span></a> Value<span class='anglebracket'>></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'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf_____________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>modulus<span class='anglebracket'><</span><span class='anglebracket'>></span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</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'>​::​</span>mp_<span class='shy'></span>units<span class='operator'>​::​</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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation__________________________'><span class='texttt'>Representation</span></span></a> Value<span class='anglebracket'>></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'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf______________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>plus<span class='anglebracket'><</span><span class='anglebracket'>></span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation___________________________'><span class='texttt'>Representation</span></span></a> Value<span class='anglebracket'>></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'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf_______________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>minus<span class='anglebracket'><</span><span class='anglebracket'>></span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation____________________________'><span class='texttt'>Representation</span></span></a> Value<span class='anglebracket'>></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'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf________________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>modulus<span class='anglebracket'><</span><span class='anglebracket'>></span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&</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'>​::​</span>mp_<span class='shy'></span>units<span class='operator'>​::​</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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:InvocableQuantities___'></a><span class='texttt'><i >InvocableQuantities</i></span><span class='anglebracket'><</span>std<span class='operator'>::</span>multiplies<span class='anglebracket'><</span><span class='anglebracket'>></span>, quantity, quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:InvocableQuantities____'></a><span class='texttt'><i >InvocableQuantities</i></span><span class='anglebracket'><</span>std<span class='operator'>::</span>divides<span class='anglebracket'><</span><span class='anglebracket'>></span>, quantity, quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>typename</span> Value<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity_________________________________________________________________'><span class='texttt'>Quantity</span></span></a><span class='anglebracket'><</span>Value<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference______________________________________________'><span class='texttt'>Reference</span></span></a><span class='anglebracket'><</span>Value<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf_________________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>multiplies<span class='anglebracket'><</span><span class='anglebracket'>></span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf___________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>typename</span> Value<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity__________________________________________________________________'><span class='texttt'>Quantity</span></span></a><span class='anglebracket'><</span>Value<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference_______________________________________________'><span class='texttt'>Reference</span></span></a><span class='anglebracket'><</span>Value<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf__________________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>divides<span class='anglebracket'><</span><span class='anglebracket'>></span>, Rep, <span class='keyword'>const</span> Value<span class='operator'>&</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf____________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</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'><</span>Value<span class='anglebracket'>></span><span class='operator'>​::​</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'><</span><span class='keyword'>typename</span> Value, std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity___________________________________________________________________'><span class='texttt'>Quantity</span></span></a><span class='anglebracket'><</span>Value<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference________________________________________________'><span class='texttt'>Reference</span></span></a><span class='anglebracket'><</span>Value<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf___________________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>multiplies<span class='anglebracket'><</span><span class='anglebracket'>></span>, <span class='keyword'>const</span> Value<span class='operator'>&</span>, Rep<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf_____________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'>&</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Value, std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity____________________________________________________________________'><span class='texttt'>Quantity</span></span></a><span class='anglebracket'><</span>Value<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span><span class='operator'>!</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference_________________________________________________'><span class='texttt'>Reference</span></span></a><span class='anglebracket'><</span>Value<span class='anglebracket'>></span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:InvokeResultOf____________________'></a><span class='texttt'><i >InvokeResultOf</i></span><span class='anglebracket'><</span>quantity_spec, std<span class='operator'>::</span>divides<span class='anglebracket'><</span><span class='anglebracket'>></span>, <span class='keyword'>const</span> Value<span class='operator'>&</span>, Rep<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> Q<span class='operator'>&</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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></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'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></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'><</span><span class='operator'>=</span><span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&</span> lhs, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</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'>​::​</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'>​::​</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'><</span><span class='operator'>=</span><span class='anglebracket'>></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'><</span>quantity, quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='anglebracket'>></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'><</span>quantity, quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>}</span> <span class='operator'>&</span><span class='operator'>&</span> <i >C</i><span class='anglebracket'><</span><span class='keyword'>typename</span> std<span class='operator'>::</span>common_type_t<span class='anglebracket'><</span>quantity, quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='anglebracket'>></span><span class='operator'>::</span>rep<span class='anglebracket'>></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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation_____________________________'><span class='texttt'>Representation</span></span></a> Value<span class='anglebracket'>></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'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity<span class='anglebracket'>></span> Q, <a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation______________________________'><span class='texttt'>Representation</span></span></a> Value<span class='anglebracket'>></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'><</span><span class='operator'>=</span><span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='keyword'>const</span> Q<span class='operator'>&</span> lhs, <span class='keyword'>const</span> Value<span class='operator'>&</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'>​::​</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'>​::​</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'><</span><span class='operator'>=</span><span class='anglebracket'>></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'>&</span><span class='operator'>&</span> <i >C</i><span class='anglebracket'><</span>Rep, Value<span class='anglebracket'>></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'>&</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'>&</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'>&</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'>&</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'>&</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'>&</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'><</span><span class='operator'>=</span><span class='anglebracket'>></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'>​::​</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'>​::​</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'>></span> <i >C</i><span class='anglebracket'><</span>quantity<span class='anglebracket'>></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'><</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference__________________________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a> R<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> delta_ <span class='curlybracket'>{</span>
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> FwdRep,
|
||
<a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf_____________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></span> Rep <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdRep<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> quantity<span class='anglebracket'><</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rep<span class='anglebracket'>></span> <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>FwdRep<span class='operator'>&</span><span class='operator'>&</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'><</span><span class='keyword'>typename</span> FwdRep,
|
||
<a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf______________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></span> Rep <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdRep<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> quantity<span class='anglebracket'><</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, Rep<span class='anglebracket'>></span> <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>FwdRep<span class='operator'>&</span><span class='operator'>&</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'>​::​</span>forward<span class='anglebracket'><</span>FwdRep<span class='anglebracket'>></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'><</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [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 Class template quantity [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'><</span>FwdFrom<span class='anglebracket'>></span><span class='anglebracket'>></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'>&</span><span class='operator'>&</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'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit__________________________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <span class='keyword'>typename</span> FwdQ, <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></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 Class template quantity [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'>&</span><span class='operator'>&</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'><</span>quantity<span class='anglebracket'><</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'>></span><span class='anglebracket'>></span><span class='parenthesis'>(</span>
|
||
std<span class='operator'>::</span>forward<span class='anglebracket'><</span>FwdQ<span class='anglebracket'>></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'><</span><a href='#concept:Representation' title='5.5.4 Concepts [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 Class template quantity [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'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf_______________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'><</span>ToRep, Q<span class='operator'>::</span>quantity_spec<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</span>ToRep, <span class='keyword'>typename</span> Q<span class='operator'>::</span>rep<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> quantity<span class='anglebracket'><</span>Q<span class='operator'>::</span>reference, ToRep<span class='anglebracket'>></span> value_cast<span class='parenthesis'>(</span>FwdQ<span class='operator'>&</span><span class='operator'>&</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'><</span>quantity<span class='anglebracket'><</span>Q<span class='operator'>::</span>reference, ToRep<span class='anglebracket'>></span><span class='anglebracket'>></span><span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'><</span>FwdQ<span class='anglebracket'>></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'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit___________________________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <a href='#concept:Representation' title='5.5.4 Concepts [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 Class template quantity [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'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></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 Class template quantity [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'>&</span><span class='operator'>&</span> q<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation_________________________________'><span class='texttt'>Representation</span></span></a> ToRep, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit____________________________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <span class='keyword'>typename</span> FwdQ,
|
||
<a href='#concept:Quantity' title='5.6.3 Class template quantity [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'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></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 Class template quantity [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'>&</span><span class='operator'>&</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'><</span>quantity<span class='anglebracket'><</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'>></span><span class='anglebracket'>></span><span class='parenthesis'>(</span>
|
||
std<span class='operator'>::</span>forward<span class='anglebracket'><</span>FwdQ<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> <a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>ToRep, Q<span class='operator'>::</span>quantity_spec<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</span>ToRep, <span class='keyword'>typename</span> Q<span class='operator'>::</span>rep<span class='anglebracket'>></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'><</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [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 Class template quantity [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'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></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'>&</span><span class='operator'>&</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'>&</span><span class='operator'>&</span>
|
||
std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</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'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span><span class='operator'>&</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'><</span>ToQ<span class='anglebracket'>></span><span class='parenthesis'>(</span>std<span class='operator'>​::​</span>forward<span class='anglebracket'><</span>FwdQ<span class='anglebracket'>></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 <a href='#qty.non.mem.conv-example-1'>1</a></i>: <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'><</span>isq<span class='operator'>::</span>distance<span class='anglebracket'>></span><span class='parenthesis'>(</span>length<span class='parenthesis'>)</span>;
|
||
</span> — <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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec_____________________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> ToQS, <span class='keyword'>typename</span> FwdQ, <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantitySpecCastableTo'></a><span class='texttt'><i >QuantitySpecCastableTo</i></span><span class='anglebracket'><</span>Q<span class='operator'>::</span>quantity_spec, ToQS<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span><span class='operator'>&</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'><</span>FwdQ<span class='anglebracket'>></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​::​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'><</span>mp_units<span class='operator'>::</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [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 Class template quantity [qty.syn]'><span id='conceptref:Quantity_____________________________________________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> Q2<span class='anglebracket'>></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'>></span> mp_units<span class='operator'>::</span>Reference;
|
||
<span class='keyword'>typename</span> std<span class='operator'>::</span>common_type_t<span class='anglebracket'><</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'>></span>;
|
||
<span class='keyword'>requires</span> mp_units<span class='operator'>::</span><a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf_________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>std<span class='operator'>::</span>common_type_t<span class='anglebracket'><</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'>></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'>></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'><</span>Q1, Q2<span class='anglebracket'>></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'><</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'><</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'>></span><span class='anglebracket'>></span>;
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>mp_units<span class='operator'>::</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [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 Concepts [qty.rep.concepts]'><span id='conceptref:Representation__________________________________'><span class='tcode_in_codeblock'>Representation</span></span></a> Value<span class='anglebracket'>></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'>&</span><span class='operator'>&</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'><</span>Q<span class='operator'>::</span>reference, std<span class='operator'>::</span>common_type_t<span class='anglebracket'><</span><span class='keyword'>typename</span> Q<span class='operator'>::</span>rep, Value<span class='anglebracket'>></span><span class='anglebracket'>></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'><</span>Q, Value<span class='anglebracket'>></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'><</span>Q<span class='operator'>::</span>reference, std<span class='operator'>::</span>common_type_t<span class='anglebracket'><</span><span class='keyword'>typename</span> Q<span class='operator'>::</span>rep, Value<span class='anglebracket'>></span><span class='anglebracket'>></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 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 General [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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:PointOrigin' title='5.7.2.2 Concepts [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'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>T, <span class='texttt'><i >point-origin-interface</i></span><span class='anglebracket'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> QS<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:PointOriginFor' title='5.7.2.2 Concepts [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 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin______'><span class='texttt'>PointOrigin</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:QuantitySpecOf' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpecOf__'><span class='texttt'>QuantitySpecOf</span></span></a><span class='anglebracket'><</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'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T, <span class='keyword'>auto</span> V<span class='anglebracket'>></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 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_______'><span class='texttt'>PointOrigin</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin________'><span class='texttt'>PointOrigin</span></span></a><span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>V<span class='parenthesis'>)</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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'>></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 Absolute [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 Concepts [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 Absolute [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'><</span><a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'>></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 Relative [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 Class template quantity_­point [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 Concepts [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 Concepts [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 Relative [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'><</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'>></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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [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'>></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 Zeroth [qty.zeroth.pt.orig]'>zeroth_point_origin_</a></span> <span class='keyword'>final</span> <span class='operator'>:</span> absolute_point_origin<span class='anglebracket'><</span>QS<span class='anglebracket'>></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'><</span>QS<span class='anglebracket'>></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'><</span><a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin__________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO, <span class='keyword'>typename</span> FwdQ,
|
||
<a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf______________________________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>PO<span class='operator'>::</span><i >quantity-spec</i><span class='anglebracket'>></span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> quantity_point<span class='anglebracket'><</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'>></span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span>PO, FwdQ<span class='operator'>&</span><span class='operator'>&</span> q<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [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 Concepts [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 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf_______________________________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>PO<span class='operator'>::</span><i >quantity-spec</i><span class='anglebracket'>></span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> quantity_point<span class='anglebracket'><</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'>></span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span>FwdQ<span class='operator'>&</span><span class='operator'>&</span> q, PO<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin____________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO, <a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity________________________________________________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> Q<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a href='#concept:ReferenceOf' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:ReferenceOf'><span class='tcode_in_codeblock'>ReferenceOf</span></span></a><span class='anglebracket'><</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'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'>&</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'><</span><a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_____________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO1, <a class='index' id='conceptref:SameAbsolutePointOriginAs'></a><i >SameAbsolutePointOriginAs</i><span class='anglebracket'><</span>PO1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></span> PO2<span class='anglebracket'>></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 Class template quantity [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'><</span><a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin______________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO1, <a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_______________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>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'><</span><a href='#concept:PointOrigin' title='5.7.2.2 Concepts [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 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf________________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>PO<span class='operator'>::</span><span class='texttt'><i >quantity-spec</i></span><span class='anglebracket'>></span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> quantity_point<span class='anglebracket'><</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'>></span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span>PO, FwdQ<span class='operator'>&</span><span class='operator'>&</span> q<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity__________________________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> FwdQ, <a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_________________'><span class='texttt'>PointOrigin</span></span></a> PO,
|
||
<a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf_________________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>PO<span class='operator'>::</span><span class='texttt'><i >quantity-spec</i></span><span class='anglebracket'>></span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> quantity_point<span class='anglebracket'><</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'>></span> <span class='keyword'>operator</span><span class='operator'>+</span><span class='parenthesis'>(</span>FwdQ<span class='operator'>&</span><span class='operator'>&</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'>​::​</span>forward<span class='anglebracket'><</span>FwdQ<span class='anglebracket'>></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'><</span><a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin__________________'><span class='texttt'>PointOrigin</span></span></a> PO, <a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity___________________________________________________________________________________________'><span class='texttt'>Quantity</span></span></a> Q<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a href='#concept:ReferenceOf' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:ReferenceOf_'><span class='texttt'>ReferenceOf</span></span></a><span class='anglebracket'><</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'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'>&</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'><</span><a href='#concept:PointOrigin' title='5.7.2.2 Concepts [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'><</span>PO1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></span> PO2<span class='anglebracket'>></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 Class template quantity [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'><</span>PO1, absolute_point_origin<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>return</span> 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'><</span>PO2, absolute_point_origin<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>return</span> 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 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpecOf___'><span class='tcode_in_codeblock'>QuantitySpecOf</span></span></a><span class='anglebracket'><</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'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<span class='parenthesis'>(</span><i >is-derived-from-specialization-of</i><span class='anglebracket'><</span>PO1, relative_point_origin<span class='anglebracket'>></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'><</span>PO2, relative_point_origin<span class='anglebracket'>></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'><</span><a href='#concept:PointOrigin' title='5.7.2.2 Concepts [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 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_____________________'><span class='texttt'>PointOrigin</span></span></a> PO2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>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'><</span>PO1, absolute_point_origin<span class='anglebracket'>></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'><</span>PO2, absolute_point_origin<span class='anglebracket'>></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'><</span>PO1, PO2<span class='anglebracket'>></span> <span class='operator'>|</span><span class='operator'>|</span>
|
||
<span class='parenthesis'>(</span><i >is-specialization-of</i><span class='anglebracket'><</span>PO1, zeroth_point_origin<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<i >is-specialization-of</i><span class='anglebracket'><</span>PO2, zeroth_point_origin<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span> <span class='operator'>&</span><span class='operator'>&</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'><</span>PO1, relative_point_origin<span class='anglebracket'>></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'><</span>PO2, relative_point_origin<span class='anglebracket'>></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'><</span>PO1, relative_point_origin<span class='anglebracket'>></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'>&</span><span class='operator'>&</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'><</span>PO2, relative_point_origin<span class='anglebracket'>></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'>&</span><span class='operator'>&</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'><</span><a href='#concept:PointOrigin' title='5.7.2.2 Concepts [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 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_______________________'><span class='texttt'>PointOrigin</span></span></a> PO2<span class='anglebracket'>></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'><</span>PO1, absolute_point_origin<span class='anglebracket'>></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'><</span>PO2, absolute_point_origin<span class='anglebracket'>></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'><</span>PO1, relative_point_origin<span class='anglebracket'>></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'><</span>PO2, relative_point_origin<span class='anglebracket'>></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'><</span>PO1, relative_point_origin<span class='anglebracket'>></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'><</span>PO2, relative_point_origin<span class='anglebracket'>></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'><</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference___________________________________________________'><span class='texttt'>Reference</span></span></a> R<span class='anglebracket'>></span>
|
||
<span class='keyword'>consteval</span> <a href='#concept:PointOriginFor' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOriginFor__'><span class='texttt'>PointOriginFor</span></span></a><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></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'><</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:QuantityPointLike' title='5.7.3 Interoperability [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 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPoint____________'><span class='texttt'>QuantityPoint</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a class='index' id='conceptref:qty-like-impl__'></a><span class='texttt'><i >qty-like-impl</i></span><span class='anglebracket'><</span>T, quantity_point_like_traits<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='comment'>// see <a href='#qty.like' title='5.6.2 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'><</span>quantity_point_like_traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>reference,
|
||
quantity_point_like_traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>point_origin,
|
||
<span class='keyword'>typename</span> quantity_point_like_traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>rep<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'><</span>T, quantity_point<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> QP, <span class='keyword'>auto</span> V<span class='anglebracket'>></span>
|
||
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:QuantityPointOf' title='5.7.4 Class template quantity_­point [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 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPoint_____________'><span class='tcode_in_codeblock'>QuantityPoint</span></span></a><span class='anglebracket'><</span>QP<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='parenthesis'>(</span><a href='#concept:QuantitySpecOf' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpecOf____'><span class='tcode_in_codeblock'>QuantitySpecOf</span></span></a><span class='anglebracket'><</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'>></span> <span class='operator'>|</span><span class='operator'>|</span>
|
||
<a class='index' id='conceptref:SameAbsolutePointOriginAs__'></a><i >SameAbsolutePointOriginAs</i><span class='anglebracket'><</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'>></span><span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Reference' title='5.4.5 Concepts [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 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOriginFor___'><span class='tcode_in_codeblock'>PointOriginFor</span></span></a><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='anglebracket'>></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 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf__________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='parenthesis'>)</span><span class='anglebracket'>></span> Rep <span class='operator'>=</span> <span class='keyword'>double</span><span class='anglebracket'>></span>
|
||
<span class='keyword'>class</span> <span id='lib:quantity_point'><a class='hidden_link' href='#lib:quantity_point' title='5.7.4 Class template quantity_­point [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 Concepts [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 Concepts [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 Concepts [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 Concepts [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 Concepts [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 Concepts [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'><</span>reference, Rep<span class='anglebracket'>></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 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 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'>&</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'>&</span><span class='operator'>&</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'><</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf__________________________________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</span>quantity_type, FwdQ<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</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'>&</span><span class='operator'>&</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'>&</span><span class='operator'>&</span> q<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf___________________________________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</span>quantity_type, FwdQ<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> quantity_point<span class='parenthesis'>(</span>FwdQ<span class='operator'>&</span><span class='operator'>&</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'><</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin__________________________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO2,
|
||
<a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf____________________________________'><span class='tcode_in_codeblock'>QuantityOf</span></span></a><span class='anglebracket'><</span>PO2<span class='operator'>::</span><i >quantity-spec</i><span class='anglebracket'>></span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</span>quantity_type, FwdQ<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:SameAbsolutePointOriginAs___'></a><i >SameAbsolutePointOriginAs</i><span class='anglebracket'><</span>PO2, PO<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> quantity_point<span class='parenthesis'>(</span>FwdQ<span class='operator'>&</span><span class='operator'>&</span> q, PO2<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:QuantityPointOf' title='5.7.4 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>absolute_point_origin<span class='anglebracket'>></span> QP<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</span>quantity_type, <span class='keyword'>typename</span> QP<span class='operator'>::</span>quantity_type<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> QP<span class='operator'>::</span>quantity_type, quantity_type<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
quantity_point<span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&</span> qp<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:QuantityPointLike' title='5.7.3 Interoperability [qty.pt.like]'><span id='conceptref:QuantityPointLike'><span class='tcode_in_codeblock'>QuantityPointLike</span></span></a> QP<span class='anglebracket'>></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'>&</span> qp<span class='parenthesis'>)</span>;
|
||
|
||
quantity_point<span class='operator'>&</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span><span class='keyword'>const</span> quantity_point<span class='operator'>&</span><span class='parenthesis'>)</span> <span class='operator'>=</span> <span class='keyword'>default</span>;
|
||
quantity_point<span class='operator'>&</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='parenthesis'>(</span>quantity_point<span class='operator'>&</span><span class='operator'>&</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 Conversions'>[qty.<span class='shy'></span>pt.<span class='shy'></span>conv]</a>, conversions</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:SameAbsolutePointOriginAs____'></a><i >SameAbsolutePointOriginAs</i><span class='anglebracket'><</span>absolute_point_origin<span class='anglebracket'>></span> NewPO<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPointOf' title='5.7.4 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf_'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'><</span><span class='parenthesis'>(</span>NewPO<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></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'><</span><a class='index' id='conceptref:UnitCompatibleWith____________'></a><i >UnitCompatibleWith</i><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> ToU<span class='anglebracket'>></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 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf__'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span><a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf___________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> ToRep<span class='anglebracket'>></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 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf___'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span><a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf____________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> ToRep,
|
||
<a class='index' id='conceptref:UnitCompatibleWith_____________'></a><i >UnitCompatibleWith</i><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> ToU<span class='anglebracket'>></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 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf____'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span><a class='index' id='conceptref:UnitCompatibleWith______________'></a><i >UnitCompatibleWith</i><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> ToU<span class='anglebracket'>></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 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf_____'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span><a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf_____________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> ToRep<span class='anglebracket'>></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 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf______'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span><a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf______________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> ToRep,
|
||
<a class='index' id='conceptref:UnitCompatibleWith_______________'></a><i >UnitCompatibleWith</i><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> ToU<span class='anglebracket'>></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 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf_______'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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 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'><</span><a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin___________________________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO2<span class='anglebracket'>></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'>&</span> quantity_ref_from<span class='parenthesis'>(</span>PO2<span class='parenthesis'>)</span> <span class='operator'>&</span> <span class='keyword'>noexcept</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin____________________________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO2<span class='anglebracket'>></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'>&</span> quantity_ref_from<span class='parenthesis'>(</span>PO2<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='operator'>&</span> <span class='keyword'>noexcept</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_____________________________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO2<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> <span class='operator'>=</span> <span class='keyword'>delete</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin______________________________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO2<span class='anglebracket'>></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 Class template quantity [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'><</span><a href='#concept:QuantityPointOf' title='5.7.4 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf________'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>absolute_point_origin<span class='anglebracket'>></span> QP<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span><span class='parenthesis'>)</span> <span class='keyword'>const</span>;
|
||
|
||
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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 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'><</span><span class='keyword'>typename</span> QP_, <a href='#concept:QuantityPointLike' title='5.7.3 Interoperability [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'><</span>QP_<span class='anglebracket'>></span><span class='anglebracket'>></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'>&</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'><</span><span class='keyword'>typename</span> QP_, <a href='#concept:QuantityPointLike' title='5.7.3 Interoperability [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'><</span>QP_<span class='anglebracket'>></span><span class='anglebracket'>></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'>&</span><span class='operator'>&</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 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'><</span><a class='index' id='conceptref:Mutable__________________'></a><i >Mutable</i><span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP<span class='anglebracket'>></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'>&</span><span class='operator'>&</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'><</span><a class='index' id='conceptref:Mutable___________________'></a><i >Mutable</i><span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP<span class='anglebracket'>></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'>&</span><span class='operator'>&</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 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'><</span><a class='index' id='conceptref:Mutable____________________'></a><i >Mutable</i><span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> qp, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> q<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:Mutable_____________________'></a><i >Mutable</i><span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> qp, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> q<span class='parenthesis'>)</span>;
|
||
|
||
<span class='comment'>// <a href='#qty.pt.arith.ops' title='5.7.12 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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'>&</span> qp, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> q, <span class='keyword'>const</span> QP<span class='operator'>&</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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'>&</span> qp, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <a href='#concept:QuantityPointOf' title='5.7.4 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf_________'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>absolute_point_origin<span class='anglebracket'>></span> QP2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> QP2<span class='operator'>&</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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_______________________________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO2<span class='anglebracket'>></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 Class template quantity [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'>&</span> qp, PO2 po<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin________________________________'><span class='tcode_in_codeblock'>PointOrigin</span></span></a> PO2<span class='anglebracket'>></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 Class template quantity [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'>&</span> qp<span class='parenthesis'>)</span>;
|
||
|
||
<span class='comment'>// <a href='#qty.pt.cmp' title='5.7.13 Comparison'>[qty.<span class='shy'></span>pt.<span class='shy'></span>cmp]</a>, comparison</span>
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <a href='#concept:QuantityPointOf' title='5.7.4 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf__________'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>absolute_point_origin<span class='anglebracket'>></span> QP2<span class='anglebracket'>></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'>&</span> lhs, <span class='keyword'>const</span> QP2<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <a href='#concept:QuantityPointOf' title='5.7.4 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf___________'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>absolute_point_origin<span class='anglebracket'>></span> QP2<span class='anglebracket'>></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'><</span><span class='operator'>=</span><span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&</span> lhs, <span class='keyword'>const</span> QP2<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='curlybracket'>}</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity___________________________________________________________________________________________________'><span class='tcode_in_codeblock'>Quantity</span></span></a> Q<span class='anglebracket'>></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'>></span> quantity_point<span class='anglebracket'><</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'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [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 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOriginFor____'><span class='tcode_in_codeblock'>PointOriginFor</span></span></a><span class='anglebracket'><</span>Q<span class='operator'>::</span>quantity_spec<span class='anglebracket'>></span> PO<span class='anglebracket'>></span>
|
||
quantity_point<span class='parenthesis'>(</span>Q, PO<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>></span> quantity_point<span class='anglebracket'><</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'>></span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:QuantityPointLike' title='5.7.3 Interoperability [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'><</span>QP<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>explicit</span><span class='parenthesis'>(</span>quantity_point_like_traits<span class='anglebracket'><</span>QP<span class='anglebracket'>></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'>></span> quantity_point<span class='anglebracket'><</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'>></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'><</span>R, PO, Rep<span class='anglebracket'>></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'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>PO<span class='parenthesis'>)</span>, absolute_point_origin<span class='anglebracket'>></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'>​::​</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'><</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf_____________________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</span>quantity_type, FwdQ<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</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'>&</span><span class='operator'>&</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'>&</span><span class='operator'>&</span> q<span class='parenthesis'>)</span>;
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf______________________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</span>quantity_type, FwdQ<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> quantity_point<span class='parenthesis'>(</span>FwdQ<span class='operator'>&</span><span class='operator'>&</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'>​::​</span>forward<span class='anglebracket'><</span>FwdQ<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> FwdQ, <a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_________________________________'><span class='texttt'>PointOrigin</span></span></a> PO2,
|
||
<a href='#concept:QuantityOf' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:QuantityOf_______________________________________'><span class='texttt'>QuantityOf</span></span></a><span class='anglebracket'><</span>PO2<span class='operator'>::</span><span class='texttt'><i >quantity-spec</i></span><span class='anglebracket'>></span> Q <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdQ<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</span>quantity_type, FwdQ<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:SameAbsolutePointOriginAs_____'></a><span class='texttt'><i >SameAbsolutePointOriginAs</i></span><span class='anglebracket'><</span>PO2, PO<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> quantity_point<span class='parenthesis'>(</span>FwdQ<span class='operator'>&</span><span class='operator'>&</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'><</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'>></span><span class='curlybracket'>{</span>std<span class='operator'>::</span>forward<span class='anglebracket'><</span>FwdQ<span class='anglebracket'>></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'><</span><a href='#concept:QuantityPointOf' title='5.7.4 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf____________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>absolute_point_origin<span class='anglebracket'>></span> QP<span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</span>quantity_type, <span class='keyword'>typename</span> QP<span class='operator'>::</span>quantity_type<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> QP<span class='operator'>::</span>quantity_type, quantity_type<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
quantity_point<span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&</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'>​::​</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'><</span><a href='#concept:QuantityPointLike' title='5.7.3 Interoperability [qty.pt.like]'><span id='conceptref:QuantityPointLike____'><span class='texttt'>QuantityPointLike</span></span></a> QP<span class='anglebracket'>></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'>&</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'><</span>QP<span class='anglebracket'>></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'>&</span><span class='operator'>&</span>
|
||
std<span class='operator'>::</span>convertible_to<span class='anglebracket'><</span>quantity<span class='anglebracket'><</span>Traits<span class='operator'>::</span>reference, <span class='keyword'>typename</span> Traits<span class='operator'>::</span>rep<span class='anglebracket'>></span>, quantity_type<span class='anglebracket'>></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'><</span>quantity<span class='anglebracket'><</span>Traits<span class='operator'>::</span>reference, <span class='keyword'>typename</span> Traits<span class='operator'>::</span>rep<span class='anglebracket'>></span>, quantity_type<span class='anglebracket'>></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'><</span><a class='index' id='conceptref:SameAbsolutePointOriginAs______'></a><span class='texttt'><i >SameAbsolutePointOriginAs</i></span><span class='anglebracket'><</span>absolute_point_origin<span class='anglebracket'>></span> NewPO<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPointOf' title='5.7.4 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf_____________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'><</span><span class='parenthesis'>(</span>NewPO<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></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'><</span>NewPO, <span class='keyword'>decltype</span><span class='parenthesis'>(</span>point_origin<span class='parenthesis'>)</span><span class='anglebracket'>></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'><</span><a class='index' id='conceptref:UnitCompatibleWith________________'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> ToU<span class='anglebracket'>></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 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf______________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span><a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf_______________________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> ToRep<span class='anglebracket'>></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 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf_______________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span><a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf________________________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> ToRep,
|
||
<a class='index' id='conceptref:UnitCompatibleWith_________________'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> ToU<span class='anglebracket'>></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 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf________________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span><a class='index' id='conceptref:UnitCompatibleWith__________________'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> ToU<span class='anglebracket'>></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 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf_________________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span><a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf_________________________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> ToRep<span class='anglebracket'>></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 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf__________________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span><a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf__________________________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></span> ToRep,
|
||
<a class='index' id='conceptref:UnitCompatibleWith___________________'></a><span class='texttt'><i >UnitCompatibleWith</i></span><span class='anglebracket'><</span>unit, quantity_spec<span class='anglebracket'>></span> ToU<span class='anglebracket'>></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 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf___________________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>quantity_spec<span class='anglebracket'>></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'><</span><a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin__________________________________'><span class='texttt'>PointOrigin</span></span></a> PO2<span class='anglebracket'>></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'>&</span> quantity_ref_from<span class='parenthesis'>(</span>PO2<span class='parenthesis'>)</span> <span class='operator'>&</span> <span class='keyword'>noexcept</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin___________________________________'><span class='texttt'>PointOrigin</span></span></a> PO2<span class='anglebracket'>></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'>&</span> quantity_ref_from<span class='parenthesis'>(</span>PO2<span class='parenthesis'>)</span> <span class='keyword'>const</span> <span class='operator'>&</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'><</span><a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin____________________________________'><span class='texttt'>PointOrigin</span></span></a> PO2<span class='anglebracket'>></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 Class template quantity [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'><</span><a href='#concept:QuantityPointOf' title='5.7.4 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf____________________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>absolute_point_origin<span class='anglebracket'>></span> QP<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</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 Class template quantity [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'><</span><span class='keyword'>typename</span> QP_, <a href='#concept:QuantityPointLike' title='5.7.3 Interoperability [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'><</span>QP_<span class='anglebracket'>></span><span class='anglebracket'>></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'>&</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'><</span><span class='keyword'>typename</span> QP_, <a href='#concept:QuantityPointLike' title='5.7.3 Interoperability [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'><</span>QP_<span class='anglebracket'>></span><span class='anglebracket'>></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'>&</span><span class='operator'>&</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'><</span>QP<span class='anglebracket'>></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'>&</span><span class='operator'>&</span>
|
||
std<span class='operator'>::</span>convertible_to<span class='anglebracket'><</span>quantity_type, quantity<span class='anglebracket'><</span>Traits<span class='operator'>::</span>reference, <span class='keyword'>typename</span> Traits<span class='operator'>::</span>rep<span class='anglebracket'>></span><span class='anglebracket'>></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'><</span>quantity_type, quantity<span class='anglebracket'><</span>Traits<span class='operator'>::</span>reference, <span class='keyword'>typename</span> Traits<span class='operator'>::</span>rep<span class='anglebracket'>></span><span class='anglebracket'>></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'>​::​</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'>​::​</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'>&</span><span class='operator'>&</span> <i >T</i><span class='anglebracket'><</span>rep<span class='anglebracket'>></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'><</span><a class='index' id='conceptref:Mutable______________________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP<span class='anglebracket'>></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'>&</span><span class='operator'>&</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'><</span><a class='index' id='conceptref:Mutable_______________________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP<span class='anglebracket'>></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'>&</span><span class='operator'>&</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'>​::​</span>forward<span class='anglebracket'><</span>QP<span class='anglebracket'>></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'><</span><a class='index' id='conceptref:Mutable________________________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> qp, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> q<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a class='index' id='conceptref:Mutable_________________________'></a><span class='texttt'><i >Mutable</i></span><span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> qp, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</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'>​::​</span>forward<span class='anglebracket'><</span>QP<span class='anglebracket'>></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'><</span>quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span>, quantity_type<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'>&</span> qp, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</span> q, <span class='keyword'>const</span> QP<span class='operator'>&</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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <span class='keyword'>auto</span> R2, <span class='keyword'>typename</span> Rep2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'>&</span> qp, <span class='keyword'>const</span> quantity<span class='anglebracket'><</span>R2, Rep2<span class='anglebracket'>></span><span class='operator'>&</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'><</span>PO, zeroth_point_origin<span class='anglebracket'>></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 Concepts [qty.ref.concepts]'><span id='conceptref:ReferenceOf__'><span class='tcode_in_codeblock'>ReferenceOf</span></span></a><span class='anglebracket'><</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'>></span> <span class='operator'>&</span><span class='operator'>&</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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <a href='#concept:QuantityPointOf' title='5.7.4 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf_____________________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>absolute_point_origin<span class='anglebracket'>></span> QP2<span class='anglebracket'>></span>
|
||
<span class='keyword'>friend</span> <span class='keyword'>constexpr</span> <a href='#concept:Quantity' title='5.6.3 Class template quantity [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'>&</span> lhs, <span class='keyword'>const</span> QP2<span class='operator'>&</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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin_____________________________________'><span class='texttt'>PointOrigin</span></span></a> PO2<span class='anglebracket'>></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 Class template quantity [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'>&</span> qp, PO2 po<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <a href='#concept:PointOrigin' title='5.7.2.2 Concepts [qty.pt.orig.concepts]'><span id='conceptref:PointOrigin______________________________________'><span class='texttt'>PointOrigin</span></span></a> PO2<span class='anglebracket'>></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 Class template quantity [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'>&</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'><</span>PO2,
|
||
<span class='operator'>::</span>mp_units<span class='operator'>::</span>absolute_point_origin<span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>)</span> <span class='curlybracket'>{</span>
|
||
<span class='keyword'>return</span> 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 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf______________________'><span class='tcode_in_codeblock'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>quantity_point, PO2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
<a href='#concept:ReferenceOf' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:ReferenceOf___'><span class='tcode_in_codeblock'>ReferenceOf</span></span></a><span class='anglebracket'><</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'>></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'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <a href='#concept:QuantityPointOf' title='5.7.4 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf_______________________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>absolute_point_origin<span class='anglebracket'>></span> QP2<span class='anglebracket'>></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'>&</span> lhs, <span class='keyword'>const</span> QP2<span class='operator'>&</span> rhs<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span>std<span class='operator'>::</span>derived_from<span class='anglebracket'><</span>quantity_point<span class='anglebracket'>></span> QP, <a href='#concept:QuantityPointOf' title='5.7.4 Class template quantity_­point [qty.pt.syn]'><span id='conceptref:QuantityPointOf________________________'><span class='texttt'>QuantityPointOf</span></span></a><span class='anglebracket'><</span>absolute_point_origin<span class='anglebracket'>></span> QP2<span class='anglebracket'>></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'><</span><span class='operator'>=</span><span class='anglebracket'>></span><span class='parenthesis'>(</span><span class='keyword'>const</span> QP<span class='operator'>&</span> lhs, <span class='keyword'>const</span> QP2<span class='operator'>&</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'>​::​</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'>​::​</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'><</span><span class='operator'>=</span><span class='anglebracket'>></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'><</span>quantity_type, <span class='keyword'>typename</span> QP2<span class='operator'>::</span>quantity_type<span class='anglebracket'>></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'><</span><a href='#concept:Reference' title='5.4.5 Concepts [qty.ref.concepts]'><span id='conceptref:Reference______________________________________________________'><span class='tcode_in_codeblock'>Reference</span></span></a> R<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> point_ <span class='curlybracket'>{</span>
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> FwdRep,
|
||
<a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf___________________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></span> Rep <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdRep<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> quantity_point<span class='anglebracket'><</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'>></span> <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>FwdRep<span class='operator'>&</span><span class='operator'>&</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'><</span><span class='keyword'>typename</span> FwdRep,
|
||
<a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf____________________________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'><</span>get_quantity_spec<span class='parenthesis'>(</span>R<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>></span> Rep <span class='operator'>=</span> std<span class='operator'>::</span>remove_cvref_t<span class='anglebracket'><</span>FwdRep<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> quantity_point<span class='anglebracket'><</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'>></span> <span class='keyword'>operator</span><span class='parenthesis'>(</span><span class='parenthesis'>)</span><span class='parenthesis'>(</span>FwdRep<span class='operator'>&</span><span class='operator'>&</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'>​::​</span>forward<span class='anglebracket'><</span>FwdRep<span class='anglebracket'>></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'><</span><a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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 Class template quantity_­point [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'><</span>FwdFromQP<span class='anglebracket'>></span><span class='anglebracket'>></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 Class template quantity_­point [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'>&</span><span class='operator'>&</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'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit______________________________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <span class='keyword'>typename</span> FwdQP, <a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'><</span>FwdQP<span class='anglebracket'>></span><span class='anglebracket'>></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 Class template quantity_­point [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'>&</span><span class='operator'>&</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'><</span>ToU<span class='anglebracket'>></span><span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'><</span>FwdQP<span class='anglebracket'>></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'><</span><a href='#concept:Representation' title='5.5.4 Concepts [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 Class template quantity_­point [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'><</span>FwdQP<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf_____________________________________'><span class='texttt'>RepresentationOf</span></span></a><span class='anglebracket'><</span>ToRep, QP<span class='operator'>::</span>quantity_spec<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</span>ToRep, <span class='keyword'>typename</span> QP<span class='operator'>::</span>rep<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> quantity_point<span class='anglebracket'><</span>QP<span class='operator'>::</span>reference, QP<span class='operator'>::</span>point_origin, ToRep<span class='anglebracket'>></span> value_cast<span class='parenthesis'>(</span>FwdQP<span class='operator'>&</span><span class='operator'>&</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'><</span>ToRep<span class='anglebracket'>></span><span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'><</span>FwdQP<span class='anglebracket'>></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'><</span><a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit_______________________________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <a href='#concept:Representation' title='5.5.4 Concepts [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 Class template quantity_­point [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'><</span>FwdQP<span class='anglebracket'>></span><span class='anglebracket'>></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 Class template quantity_­point [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'>&</span><span class='operator'>&</span> qp<span class='parenthesis'>)</span>;
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><a href='#concept:Representation' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:Representation_____________________________________'><span class='texttt'>Representation</span></span></a> ToRep, <a href='#concept:Unit' title='5.4.4.4 Concepts [qty.unit.concepts]'><span id='conceptref:Unit________________________________________________________________________________________________________________________________'><span class='texttt'>Unit</span></span></a> <span class='keyword'>auto</span> ToU, <span class='keyword'>typename</span> FwdQP,
|
||
<a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'><</span>FwdQP<span class='anglebracket'>></span><span class='anglebracket'>></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 Class template quantity_­point [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'>&</span><span class='operator'>&</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'><</span>ToU, ToRep<span class='anglebracket'>></span><span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'><</span>FwdQP<span class='anglebracket'>></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'>&</span><span class='operator'>&</span> <a href='#concept:RepresentationOf' title='5.5.4 Concepts [qty.rep.concepts]'><span id='conceptref:RepresentationOf______________________________________'><span class='tcode_in_codeblock'>RepresentationOf</span></span></a><span class='anglebracket'><</span>ToRep, QP<span class='operator'>::</span>quantity_spec<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span>
|
||
std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</span>ToRep, <span class='keyword'>typename</span> QP<span class='operator'>::</span>rep<span class='anglebracket'>></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'><</span><a href='#concept:Quantity' title='5.6.3 Class template quantity [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 Class template quantity_­point [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'><</span>FwdQP<span class='anglebracket'>></span><span class='anglebracket'>></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'>&</span><span class='operator'>&</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'>&</span><span class='operator'>&</span>
|
||
std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</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'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'>&</span><span class='operator'>&</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'><</span>ToQ<span class='anglebracket'>></span><span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'><</span>FwdQP<span class='anglebracket'>></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'><</span><a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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 Class template quantity_­point [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'><</span>FwdQP<span class='anglebracket'>></span><span class='anglebracket'>></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'>&</span><span class='operator'>&</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'>&</span><span class='operator'>&</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'>&</span><span class='operator'>&</span>
|
||
std<span class='operator'>::</span>constructible_from<span class='anglebracket'><</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'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'>&</span><span class='operator'>&</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'><</span>ToQP<span class='anglebracket'>></span><span class='parenthesis'>(</span>std<span class='operator'>​::​</span>forward<span class='anglebracket'><</span>FwdQP<span class='anglebracket'>></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'><</span><a href='#concept:QuantitySpec' title='5.4.3.2 Concepts [qty.spec.concepts]'><span id='conceptref:QuantitySpec___________________________________________________________________________________________________'><span class='texttt'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> ToQS, <span class='keyword'>typename</span> FwdQP, <a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'><</span>FwdQP<span class='anglebracket'>></span><span class='anglebracket'>></span>
|
||
<span class='keyword'>requires</span> <a class='index' id='conceptref:QuantitySpecCastableTo_'></a><span class='texttt'><i >QuantitySpecCastableTo</i></span><span class='anglebracket'><</span>QP<span class='operator'>::</span>quantity_spec, ToQS<span class='anglebracket'>></span>
|
||
<span class='keyword'>constexpr</span> <a href='#concept:QuantityPoint' title='5.7.4 Class template quantity_­point [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'>&</span><span class='operator'>&</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'><</span>ToQS<span class='anglebracket'>></span><span class='parenthesis'>(</span>std<span class='operator'>::</span>forward<span class='anglebracket'><</span>FwdQP<span class='anglebracket'>></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​::​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'><</span><span class='keyword'>typename</span> Period<span class='anglebracket'>></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'><</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>nanoseconds<span class='operator'>::</span>period<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> nano<span class='anglebracket'><</span>second<span class='anglebracket'>></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'><</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>microseconds<span class='operator'>::</span>period<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> micro<span class='anglebracket'><</span>second<span class='anglebracket'>></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'><</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>milliseconds<span class='operator'>::</span>period<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> milli<span class='anglebracket'><</span>second<span class='anglebracket'>></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'><</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>seconds<span class='operator'>::</span>period<span class='anglebracket'>></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'><</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>minutes<span class='operator'>::</span>period<span class='anglebracket'>></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'><</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>hours<span class='operator'>::</span>period<span class='anglebracket'>></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'><</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>days<span class='operator'>::</span>period<span class='anglebracket'>></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'><</span>Period, std<span class='operator'>::</span>chrono<span class='operator'>::</span>weeks<span class='operator'>::</span>period<span class='anglebracket'>></span><span class='parenthesis'>)</span>
|
||
<span class='keyword'>return</span> mag<span class='anglebracket'><</span><span class='literal'>7</span><span class='anglebracket'>></span> <span class='operator'>*</span> day;
|
||
<span class='keyword'>else</span>
|
||
<span class='keyword'>return</span> mag_ratio<span class='anglebracket'><</span>Period<span class='operator'>::</span>num, Period<span class='operator'>::</span>den<span class='anglebracket'>></span> <span class='operator'>*</span> second;
|
||
<span class='curlybracket'>}</span>
|
||
|
||
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> Rep, <span class='keyword'>typename</span> Period<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> <a class='index' id='lib:quantity_like_traits,std::chrono::duration'></a>quantity_like_traits<span class='anglebracket'><</span>std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'><</span>Rep, Period<span class='anglebracket'>></span><span class='anglebracket'>></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'><</span>Period<span class='anglebracket'>></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'><</span>Rep, Period<span class='anglebracket'>></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'>&</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'><</span>rep<span class='anglebracket'>></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'>&</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'><</span>rep<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> Clock<span class='anglebracket'>></span>
|
||
<span class='keyword'>struct</span> <span id='lib:chrono_point_origin_'><a class='hidden_link' href='#lib:chrono_point_origin_' title='5.9 std​::​chrono interoperability [qty.chrono]'>chrono_point_origin_</a></span> <span class='keyword'>final</span> <span class='operator'>:</span> absolute_point_origin<span class='anglebracket'><</span>isq<span class='operator'>::</span>time<span class='anglebracket'>></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'><</span><span class='keyword'>typename</span> Clock, <span class='keyword'>typename</span> Rep, <span class='keyword'>typename</span> Period<span class='anglebracket'>></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'><</span>
|
||
std<span class='operator'>::</span>chrono<span class='operator'>::</span>time_point<span class='anglebracket'><</span>Clock, std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'><</span>Rep, Period<span class='anglebracket'>></span><span class='anglebracket'>></span><span class='anglebracket'>></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'><</span>Period<span class='anglebracket'>></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'><</span>Clock<span class='anglebracket'>></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'><</span>Clock, std<span class='operator'>::</span>chrono<span class='operator'>::</span>duration<span class='anglebracket'><</span>Rep, Period<span class='anglebracket'>></span><span class='anglebracket'>></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'>&</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'><</span>rep<span class='anglebracket'>></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'>&</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'><</span>rep<span class='anglebracket'>></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'><</span>Rep, Period<span class='anglebracket'>></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> |