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

67 lines
20 KiB
HTML

<!DOCTYPE html><html lang='en'><head><title>[qty.ref.syn]</title><meta charset='UTF-8'/><link rel='stylesheet' type='text/css' href='14882.css'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Serif'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Sans'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Sans+Mono'/><link rel='icon' href='icon.png'/><link rel='stylesheet' type='text/css' href='expanded.css' title='Normal'/><link rel='alternate stylesheet' type='text/css' href='colored.css' title='Notes and examples colored'/><link rel='alternate stylesheet' type='text/css' href='normative-only.css' title='Notes and examples hidden'/></head><body><div class='wrapper'><h1 ><a class='secnum' style='min-width:50pt'>5</a> Quantities and units library <a class='abbr_ref' href='index.html#quantities'>[quantities]</a></h1><h2 ><a class='secnum' style='min-width:65pt'>5.4</a> Reference <a class='abbr_ref' href='qty.ref.html#syn'>[qty.ref]</a></h2><h3 ><a class='secnum' style='min-width:80pt'>5.4.6</a> Class template <span class='texttt'>reference</span> <a class='abbr_ref'>[qty.ref.syn]</a></h3><div class='texpara'><span id='lib:reference,cbrt'><span id='lib:cbrt,reference'><span id='lib:reference,sqrt'><span id='lib:sqrt,reference'><span id='lib:reference,pow'><span id='lib:pow,reference'><span id='lib:reference,inverse'><span id='lib:inverse,reference'><span id='lib:AssociatedUnit,operator/'><span id='lib:operator/,AssociatedUnit'><span id='lib:reference,operator/'><span id='lib:operator/,reference'><span id='lib:AssociatedUnit,operator*'><span id='lib:operator*,AssociatedUnit'><span id='lib:reference,operator*'><span id='lib:operator*,reference'><div class='marginalizedparent'><a class='itemDeclLink' href='#lib:operator*,reference'>🔗</a></div><span class='codeblock'><span class='keyword'>namespace</span> mp_units <span class='curlybracket'>{</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='qty.spec.concepts.html#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> <span class='keyword'>auto</span> Q, <a href='qty.unit.concepts.html#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit'><span class='tcode_in_codeblock'>Unit</span></span></a> <span class='keyword'>auto</span> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>using</span> <i >reference-t</i> <span class='operator'>=</span> reference<span class='anglebracket'>&lt;</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>Q<span class='parenthesis'>)</span>, <span class='keyword'>decltype</span><span class='parenthesis'>(</span>U<span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>; <span class='comment'>// <i >exposition only</i></span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='qty.spec.concepts.html#concept:QuantitySpec' title='5.4.3.2&emsp;Concepts&emsp;[qty.spec.concepts]'><span id='conceptref:QuantitySpec_'><span class='tcode_in_codeblock'>QuantitySpec</span></span></a> Q, <a href='qty.unit.concepts.html#concept:Unit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:Unit_'><span class='tcode_in_codeblock'>Unit</span></span></a> U<span class='anglebracket'>&gt;</span>
<span class='keyword'>struct</span> <span id='lib:reference'><a class='hidden_link' href='#lib:reference' title='5.4.6&emsp;Class template reference&emsp;[qty.ref.syn]'>reference</a></span> <span class='curlybracket'>{</span>
<span class='comment'>// <a href='qty.ref.ops.html' title='5.4.7&emsp;Operations'>[qty.<span class='shy'></span>ref.<span class='shy'></span>ops]</a>, operations</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q2, <span class='keyword'>typename</span> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>reference, reference<span class='anglebracket'>&lt;</span>Q2, U2<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='qty.unit.concepts.html#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>reference, U2<span class='parenthesis'>)</span>
<span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> get_quantity_spec<span class='parenthesis'>(</span>U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, U<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='qty.unit.concepts.html#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit_'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U1<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>*</span><span class='parenthesis'>(</span>U1, reference<span class='parenthesis'>)</span>
<span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span> <span class='operator'>*</span> Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>*</span> U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q2, <span class='keyword'>typename</span> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>reference, reference<span class='anglebracket'>&lt;</span>Q2, U2<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>
<span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>/</span> Q2<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>/</span> U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='qty.unit.concepts.html#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit__'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>reference, U2<span class='parenthesis'>)</span>
<span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>/</span> get_quantity_spec<span class='parenthesis'>(</span>U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, U<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>/</span> U2<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='qty.unit.concepts.html#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit___'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U1<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> <span class='keyword'>operator</span><span class='operator'>/</span><span class='parenthesis'>(</span>U1, reference<span class='parenthesis'>)</span>
<span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>get_quantity_spec<span class='parenthesis'>(</span>U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span> <span class='operator'>/</span> Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span>, U1<span class='curlybracket'>{</span><span class='curlybracket'>}</span> <span class='operator'>/</span> U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> inverse<span class='parenthesis'>(</span>reference<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>inverse<span class='parenthesis'>(</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, inverse<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span>std<span class='operator'>::</span>intmax_t Num, std<span class='operator'>::</span>intmax_t Den <span class='operator'>=</span> <span class='literal'>1</span><span class='anglebracket'>&gt;</span>
<span class='keyword'>requires</span><span class='parenthesis'>(</span>Den <span class='operator'>!</span><span class='operator'>=</span> <span class='literal'>0</span><span class='parenthesis'>)</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> pow<span class='parenthesis'>(</span>reference<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>pow<span class='anglebracket'>&lt;</span>Num, Den<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, pow<span class='anglebracket'>&lt;</span>Num, Den<span class='anglebracket'>&gt;</span><span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> sqrt<span class='parenthesis'>(</span>reference<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>sqrt<span class='parenthesis'>(</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, sqrt<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>;
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>auto</span> cbrt<span class='parenthesis'>(</span>reference<span class='parenthesis'>)</span> <span class='operator'>-</span><span class='anglebracket'>&gt;</span> <i >reference-t</i><span class='anglebracket'>&lt;</span>cbrt<span class='parenthesis'>(</span>Q<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span>, cbrt<span class='parenthesis'>(</span>U<span class='curlybracket'>{</span><span class='curlybracket'>}</span><span class='parenthesis'>)</span><span class='anglebracket'>&gt;</span>;
<span class='comment'>// <a href='qty.ref.cmp.html' title='5.4.8&emsp;Comparison'>[qty.<span class='shy'></span>ref.<span class='shy'></span>cmp]</a>, comparison</span>
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q2, <span class='keyword'>typename</span> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>reference, reference<span class='anglebracket'>&lt;</span>Q2, U2<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='qty.unit.concepts.html#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit____'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> <span class='keyword'>operator</span><span class='operator'>=</span><span class='operator'>=</span><span class='parenthesis'>(</span>reference, U2 u2<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><span class='keyword'>typename</span> Q2, <span class='keyword'>typename</span> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> convertible<span class='parenthesis'>(</span>reference, reference<span class='anglebracket'>&lt;</span>Q2, U2<span class='anglebracket'>&gt;</span><span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='qty.unit.concepts.html#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit_____'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U2<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> convertible<span class='parenthesis'>(</span>reference, U2 u2<span class='parenthesis'>)</span>;
<span class='keyword'>template</span><span class='anglebracket'>&lt;</span><a href='qty.unit.concepts.html#concept:AssociatedUnit' title='5.4.4.4&emsp;Concepts&emsp;[qty.unit.concepts]'><span id='conceptref:AssociatedUnit______'><span class='tcode_in_codeblock'>AssociatedUnit</span></span></a> U1<span class='anglebracket'>&gt;</span>
<span class='keyword'>friend</span> <span class='keyword'>consteval</span> <span class='keyword'>bool</span> convertible<span class='parenthesis'>(</span>U1 u1, reference<span class='parenthesis'>)</span>;
<span class='curlybracket'>}</span>;
<span class='curlybracket'>}</span>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></div><div class='para' id='1'><div class='marginalizedparent'><a class='marginalized' href='#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-units329ffdaacb1bd7bed08565ac80d9eef7ccb1e5b5/source/quantities.tex#L3431'>#</a></div><div class='texpara'><div id='1.sentence-1' class='sentence'><span class='texttt'>reference<span class='anglebracket'>&lt;</span>Q, U<span class='anglebracket'>&gt;</span></span> represents the reference of a quantity (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-01">IEC 60050, 112-01-01</a>)<a class='hidden_link' href='#1.sentence-1'>.</a></div> <div id='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='#1.sentence-2'>.</a></div> <div id='note-1' class='note'><div class='texpara'>[<i>Note&nbsp;<a href='#note-1'>1</a></i>:&ensp;<div id='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='#1.sentence-3'>.</a></div> <div id='example-1' class='example'><div class='texpara'>[<i>Example&nbsp;<a href='#example-1'>1</a></i>:&ensp;<span class='codeblock'><span class='keyword'>using</span> <span class='keyword'>namespace</span> si<span class='operator'>::</span>unit_symbols;
<span class='keyword'>auto</span> x <span class='operator'>=</span> <span class='literal'>1</span> <span class='operator'>*</span> m; <span class='comment'>// measures a length</span>
<span class='keyword'>auto</span> y <span class='operator'>=</span> <span class='literal'>1</span> <span class='operator'>*</span> isq<span class='operator'>::</span>width<span class='squarebracket'>[</span>m<span class='squarebracket'>]</span>; <span class='comment'>// measures a width</span>
<span class='keyword'>auto</span> z <span class='operator'>=</span> <span class='literal'>1</span> <span class='operator'>*</span> isq<span class='operator'>::</span>diameter<span class='squarebracket'>[</span>m<span class='squarebracket'>]</span>; <span class='comment'>// measures a diameter</span>
</span>&nbsp;<i>end example</i>]</div></div>&nbsp;<i>end note</i>]</div></div></div></div></div></body></html>