forked from mpusz/mp-units
48 lines
17 KiB
HTML
48 lines
17 KiB
HTML
<!DOCTYPE html><html lang='en'><head><title>[qty.spec.concepts]</title><meta charset='UTF-8'/><link rel='stylesheet' type='text/css' href='14882.css'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Serif'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Sans'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Sans+Mono'/><link rel='icon' href='icon.png'/><link rel='stylesheet' type='text/css' href='expanded.css' title='Normal'/><link rel='alternate stylesheet' type='text/css' href='colored.css' title='Notes and examples colored'/><link rel='alternate stylesheet' type='text/css' href='normative-only.css' title='Notes and examples hidden'/></head><body><div class='wrapper'><h1 ><a class='secnum' style='min-width:50pt'>5</a> Quantities and units library <a class='abbr_ref' href='index.html#quantities'>[quantities]</a></h1><h2 ><a class='secnum' style='min-width:65pt'>5.4</a> Reference <a class='abbr_ref' href='qty.ref.html#qty.spec.concepts'>[qty.ref]</a></h2><h3 ><a class='secnum' style='min-width:80pt'>5.4.3</a> Quantity specification <a class='abbr_ref' href='qty.spec.html#concepts'>[qty.spec]</a></h3><h4 ><a class='secnum' style='min-width:95pt'>5.4.3.2</a> Concepts <a class='abbr_ref'>[qty.spec.concepts]</a></h4><div class='texpara'><div class='itemdecl' id='itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#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></body></html> |