Deployed 93f3be47 to HEAD with MkDocs 1.6.1 and mike 2.1.3
This commit is contained in:
1 parent
1cbda4b2e4
commit
dcc831954c
6 files changed
+70
-40
No files matched your search
+3
-2
@@ -2726,12 +2726,13 @@ quantities of the same kind.</p>
|
||||
</span><span id="__span-5-6"><a id="__codelineno-5-6" name="__codelineno-5-6" href="#__codelineno-5-6"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">radius</span><span class="p">));</span>
|
||||
</span></code></pre></div>
|
||||
<p>Explicit conversions are forced by passing the quantity to a call operator of a <code>quantity_spec</code>
|
||||
type:</p>
|
||||
type or by calling <code>quantity</code>'s explicit constructor:</p>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-6-1"><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="kt">void</span><span class="w"> </span><span class="nf">foo</span><span class="p">(</span><span class="n">quantity</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">[</span><span class="n">m</span><span class="p">]</span><span class="o">></span><span class="w"> </span><span class="n">q</span><span class="p">);</span>
|
||||
</span></code></pre></div>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="n">quantity</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">[</span><span class="n">m</span><span class="p">]</span><span class="o">></span><span class="w"> </span><span class="n">q1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">42</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">m</span><span class="p">;</span>
|
||||
</span><span id="__span-7-2"><a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a><span class="n">quantity</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">[</span><span class="n">m</span><span class="p">]</span><span class="o">></span><span class="w"> </span><span class="n">q2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">(</span><span class="n">q1</span><span class="p">);</span><span class="w"> </span><span class="c1">// explicit quantity conversion</span>
|
||||
</span><span id="__span-7-3"><a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="n">foo</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">(</span><span class="n">q1</span><span class="p">));</span><span class="w"> </span><span class="c1">// explicit quantity conversion</span>
|
||||
</span><span id="__span-7-3"><a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="n">quantity</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">[</span><span class="n">m</span><span class="p">]</span><span class="o">></span><span class="w"> </span><span class="n">q3</span><span class="p">(</span><span class="n">q1</span><span class="p">);</span><span class="w"> </span><span class="c1">// direct initialization</span>
|
||||
</span><span id="__span-7-4"><a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a><span class="n">foo</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">(</span><span class="n">q1</span><span class="p">));</span><span class="w"> </span><span class="c1">// explicit quantity conversion</span>
|
||||
</span></code></pre></div>
|
||||
</li>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version": "https://jsonfeed.org/version/1", "title": "mp-units", "home_page_url": "https://mpusz.github.io/mp-units/HEAD/", "feed_url": "https://mpusz.github.io/mp-units/HEAD/feed_json_updated.json", "description": "The quantities and units library for C++", "icon": null, "authors": [{"name": "mp-units Team"}], "language": "en", "items": [{"id": "https://mpusz.github.io/mp-units/HEAD/blog/2025/06/16/introducing-absolute-quantities/", "url": "https://mpusz.github.io/mp-units/HEAD/blog/2025/06/16/introducing-absolute-quantities/", "title": "Introducing absolute quantities", "content_html": "<h1>Introducing absolute quantities</h1>\n<p>This post introduces a new abstraction called an absolute quantity. It complements affine\nspace abstractions (point and delta) and will most probably be a new default in the library\nwhen we release V3.</p>", "image": "https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/introducing-absolute-quantities.png", "date_modified": "2025-06-18T05:35:59+00:00", "authors": [{"name": "Mateusz Pusz"}], "tags": ["Metrology"]}, {"id": "https://mpusz.github.io/mp-units/HEAD/blog/2025/01/15/bringing-quantity-safety-to-the-next-level/", "url": "https://mpusz.github.io/mp-units/HEAD/blog/2025/01/15/bringing-quantity-safety-to-the-next-level/", "title": "Bringing Quantity-Safety To The Next Level", "content_html": "<h1>Bringing Quantity-Safety To The Next Level</h1>\n<p>All quantities and units libraries need to be unit-safe. Most of the libraries on the market do\nthis correctly. Some of them are also dimension-safe, which adds another level of protection for\ntheir users.</p>\n<p><strong>mp-units</strong> is probably the only library on the market that additionally is quantity-safe. This\ngives a new quality and possibilities. I've described the major idea behind it, implementation\ndetails, and benefits to the users in the <a href=\"isq-part-5-benefits.md\">series of posts about the International System of Quantities</a>.</p>\n<p>However, this is only the beginning. We've always planned more and worked on the extensions in our\nfree time. In this post, I will describe:</p>\n<ul>\n<li>What a quantity character is?</li>\n<li>The importance of using proper representation types for the quantities.</li>\n<li>The power of providing character-specific operations for the quantities.</li>\n<li>Discuss implementation challenges and possible solutions.</li>\n</ul>", "image": "https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/bringing-quantity-safety-to-the-next-level.png", "date_modified": "2025-02-11T16:26:19+00:00", "authors": [{"name": "Mateusz Pusz"}], "tags": ["Metrology"]}, {"id": "https://mpusz.github.io/mp-units/HEAD/blog/2024/10/28/international-system-of-quantities-isq-part-4---implementing-isq/", "url": "https://mpusz.github.io/mp-units/HEAD/blog/2024/10/28/international-system-of-quantities-isq-part-4---implementing-isq/", "title": "International System of Quantities (ISQ): Part 4 - Implementing ISQ", "content_html": "<h1>International System of Quantities (ISQ): Part 4 - Implementing ISQ</h1>\n<p>Up until now, we have introduced the International System of Quantities and described how we can\nmodel its main aspects. This article will present how to implement those models in a programming\nlanguage, and we will point out some of the first issues that stand in our way.</p>", "image": "https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/isq-part-4-implemeting-isq.png", "date_modified": "2025-02-11T16:26:19+00:00", "authors": [{"name": "Mateusz Pusz"}], "tags": ["Metrology"]}, {"id": "https://mpusz.github.io/mp-units/HEAD/blog/2024/11/11/international-system-of-quantities-isq-part-6---challenges/", "url": "https://mpusz.github.io/mp-units/HEAD/blog/2024/11/11/international-system-of-quantities-isq-part-6---challenges/", "title": "International System of Quantities (ISQ): Part 6 - Challenges", "content_html": "<h1>International System of Quantities (ISQ): Part 6 - Challenges</h1>\n<p>This article might be the last one from our series. This time, we will discuss the challenges and\nissues with modeling of the ISQ in software.</p>", "image": "https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/isq-part-6-challenges.png", "date_modified": "2025-02-11T16:26:19+00:00", "authors": [{"name": "Mateusz Pusz"}], "tags": ["Metrology"]}, {"id": "https://mpusz.github.io/mp-units/HEAD/blog/2024/11/25/report-from-the-wroc%C5%82aw-2024-iso-c-committee-meeting/", "url": "https://mpusz.github.io/mp-units/HEAD/blog/2024/11/25/report-from-the-wroc%C5%82aw-2024-iso-c-committee-meeting/", "title": "Report from the Wroc\u0142aw 2024 ISO C++ Committee meeting", "content_html": "<h1>Report from the Wroc\u0142aw 2024 ISO C++ Committee meeting</h1>\n<p>The Wroc\u0142aw 2024 meeting was another efficient step in the standardization of this library.\nWe've spent the entire day on the joint LEWGI and SG6 discussion and got lots of feedback.\nWe've also iLine truncated
|
||||
{"version": "https://jsonfeed.org/version/1", "title": "mp-units", "home_page_url": "https://mpusz.github.io/mp-units/HEAD/", "feed_url": "https://mpusz.github.io/mp-units/HEAD/feed_json_updated.json", "description": "The quantities and units library for C++", "icon": null, "authors": [{"name": "mp-units Team"}], "language": "en", "items": [{"id": "https://mpusz.github.io/mp-units/HEAD/blog/2024/10/21/international-system-of-quantities-isq-part-3---modeling-isq/", "url": "https://mpusz.github.io/mp-units/HEAD/blog/2024/10/21/international-system-of-quantities-isq-part-3---modeling-isq/", "title": "International System of Quantities (ISQ): Part 3 - Modeling ISQ", "content_html": "<h1>International System of Quantities (ISQ): Part 3 - Modeling ISQ</h1>\n<p>The physical units libraries on the market typically only focus on modeling one or more systems\nof units. However, as we have learned, this is not the only system kind to model. Another,\nand maybe even more important, is a system of quantities. The most important example here is\nthe International System of Quantities (ISQ) defined by ISO/IEC 80000.</p>\n<p>This article continues our series about the International System of Quantities. This time, we will\nlearn about the main ideas behind the ISQ and describe how it can be modelled in a programming\nlanguage.</p>", "image": "https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/isq-part-3-modeling-isq.png", "date_modified": "2025-06-20T15:20:57+00:00", "authors": [{"name": "Mateusz Pusz"}], "tags": ["Metrology"]}, {"id": "https://mpusz.github.io/mp-units/HEAD/blog/2025/06/16/introducing-absolute-quantities/", "url": "https://mpusz.github.io/mp-units/HEAD/blog/2025/06/16/introducing-absolute-quantities/", "title": "Introducing absolute quantities", "content_html": "<h1>Introducing absolute quantities</h1>\n<p>This post introduces a new abstraction called an absolute quantity. It complements affine\nspace abstractions (point and delta) and will most probably be a new default in the library\nwhen we release V3.</p>", "image": "https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/introducing-absolute-quantities.png", "date_modified": "2025-06-18T05:35:59+00:00", "authors": [{"name": "Mateusz Pusz"}], "tags": ["Metrology"]}, {"id": "https://mpusz.github.io/mp-units/HEAD/blog/2025/01/15/bringing-quantity-safety-to-the-next-level/", "url": "https://mpusz.github.io/mp-units/HEAD/blog/2025/01/15/bringing-quantity-safety-to-the-next-level/", "title": "Bringing Quantity-Safety To The Next Level", "content_html": "<h1>Bringing Quantity-Safety To The Next Level</h1>\n<p>All quantities and units libraries need to be unit-safe. Most of the libraries on the market do\nthis correctly. Some of them are also dimension-safe, which adds another level of protection for\ntheir users.</p>\n<p><strong>mp-units</strong> is probably the only library on the market that additionally is quantity-safe. This\ngives a new quality and possibilities. I've described the major idea behind it, implementation\ndetails, and benefits to the users in the <a href=\"isq-part-5-benefits.md\">series of posts about the International System of Quantities</a>.</p>\n<p>However, this is only the beginning. We've always planned more and worked on the extensions in our\nfree time. In this post, I will describe:</p>\n<ul>\n<li>What a quantity character is?</li>\n<li>The importance of using proper representation types for the quantities.</li>\n<li>The power of providing character-specific operations for the quantities.</li>\n<li>Discuss implementation challenges and possible solutions.</li>\n</ul>", "image": "https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/bringing-quantity-safety-to-the-next-level.png", "date_modified": "2025-02-11T16:26:19+00:00", "authors": [{"name": "Mateusz Pusz"}], "tags": ["Metrology"]}, {"id": "https://mpusz.github.io/mp-units/HEAD/blog/2024/10/28/international-system-of-quantities-isq-part-4---implementing-isq/", "url": "https://mpusz.github.io/mp-units/HEAD/blog/2024/10/28/international-system-of-quantities-isq-part-4---implementing-isq/", "title": "International System of Quantities (ISQ): Part 4 - Implementing ISQ", "content_html": "<h1>International System of Quantities (ISQ): Part 4 - Implementing ISQ</h1>\n<p>Up until now, we have introduced the International System of Quantities and described how we can\nmodel its main aspects. This article will present how to implement those models in a programming\nlanguage, and we will point out some of the first issues that stand in our way.</p>", "image": "https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/isq-part-4-implemeting-isq.png", "date_modified": "2025-02-11T16:26:19+00:00", "authors": [{"name": "Mateusz Pusz"}], "tags": ["Metrology"]}, {"id": "https://mpusz.github.io/mp-units/HEAD/blog/2024/11/11/international-system-of-quantities-isq-part-6---challenges/", "url": "https://mpusz.github.io/mp-units/HEAD/blog/2Line truncated
|
||||
@@ -1 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"> <channel><title>mp-units</title><description>The quantities and units library for C++</description><link>https://mpusz.github.io/mp-units/HEAD/</link><atom:link href="https://mpusz.github.io/mp-units/HEAD/feed_rss_created.xml" rel="self" type="application/rss+xml" /><managingEditor>mp-units Team</managingEditor><docs>https://github.com/mpusz/mp-units</docs><language>en</language> <pubDate>Fri, 20 Jun 2025 09:00:50 -0000</pubDate> <lastBuildDate>Fri, 20 Jun 2025 09:00:50 -0000</lastBuildDate> <ttl>1440</ttl> <generator>MkDocs RSS plugin - v1.17.3</generator> <image> <url>None</url> <title>mp-units</title><link>https://mpusz.github.io/mp-units/HEAD/</link> </image> <item> <title>Introducing absolute quantities</title> <author>Mateusz Pusz</author> <category>Metrology</category> <description><h1>Introducing absolute quantities</h1><p>This post introduces a new abstraction called an absolute quantity. It complements affinespace abstractions (point and delta) and will most probably be a new default in the librarywhen we release V3.</p></description><link>https://mpusz.github.io/mp-units/HEAD/blog/2025/06/16/introducing-absolute-quantities/</link> <pubDate>Mon, 16 Jun 2025 00:00:00 +0000</pubDate><source url="https://mpusz.github.io/mp-units/HEAD/feed_rss_created.xml">mp-units</source><guid isPermaLink="true">https://mpusz.github.io/mp-units/HEAD/blog/2025/06/16/introducing-absolute-quantities/</guid> <enclosure url="https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/introducing-absolute-quantities.png" type="image/png" length="None" /> </item> <item> <title>Bringing Quantity-Safety To The Next Level</title> <author>Mateusz Pusz</author> <category>Metrology</category> <description><h1>Bringing Quantity-Safety To The Next Level</h1><p>All quantities and units libraries need to be unit-safe. Most of the libraries on the market dothis correctly. Some of them are also dimension-safe, which adds another level of protection fortheir users.</p><p><strong>mp-units</strong> is probably the only library on the market that additionally is quantity-safe. Thisgives a new quality and possibilities. I've described the major idea behind it, implementationdetails, and benefits to the users in the <a href="isq-part-5-benefits.md">series of posts about the International System of Quantities</a>.</p><p>However, this is only the beginning. We've always planned more and worked on the extensions in ourfree time. In this post, I will describe:</p><ul><li>What a quantity character is?</li><li>The importance of using proper representation types for the quantities.</li><li>The power of providing character-specific operations for the quantities.</li><li>Discuss implementation challenges and possible solutions.</li></ul></description><link>https://mpusz.github.io/mp-units/HEAD/blog/2025/01/15/bringing-quantity-safety-to-the-next-level/</link> <pubDate>Wed, 15 Jan 2025 00:00:00 +0000</pubDate><source url="https://mpusz.github.io/mp-units/HEAD/feed_rss_created.xml">mp-units</source><guid isPermaLink="true">https://mpusz.github.io/mp-units/HEAD/blog/2025/01/15/bringing-quantity-safety-to-the-next-level/</guid> <enclosure url="https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/bringing-quantity-safety-to-the-next-level.png" type="image/png" length="None" /> </item> <item> <title>Report from the Wrocław 2024 ISO C++ Committee meeting</title> <author>Mateusz Pusz</author> <category>WG21 Updates</category> <description><h1>Report from the Wrocław 2024 ISO C++ Committee meeting</h1><p>The Wrocław 2024 meeting was another efficient step in the standardization of this library.We've spent the entire day on the joint LEWGI and SG6 discussion and got lots of feedback.We've also introduced <code>std::fixed_string</code> to LEWG for C++26.</p></description><link>https://mpusz.github.io/mp-units/HEAD/blog/2024/11/25/report-from-the-wroc%C5%82aw-2024-iso-c-committee-meeting/</link> <pubDate>Mon, 25 Nov 2024 00:00:00 +0000</pubDate><source url="https://mpusz.github.io/mp-units/HEAD/feed_rss_created.xml">mp-units</source><guid isPermaLink="true">https://mpusz.github.io/mp-units/HEAD/blog/2024/11/25/report-from-the-wroc%C5%82aw-2024-iso-c-committee-meeting/</guid> <enclosure url="https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/wrocław-2024-report.png" type="image/png" length="None" /> </item> <item> <title>International System of Quantities (ISQ): Part 6 - Challenges</title> <author>Mateusz Pusz</author> <category>Metrology</category> <description><h1>International System of Quantities (ISQ): Part 6 - Challenges</h1><p>This articLine truncated
|
||||
<?xml version="1.0" encoding="UTF-8" ?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"> <channel><title>mp-units</title><description>The quantities and units library for C++</description><link>https://mpusz.github.io/mp-units/HEAD/</link><atom:link href="https://mpusz.github.io/mp-units/HEAD/feed_rss_created.xml" rel="self" type="application/rss+xml" /><managingEditor>mp-units Team</managingEditor><docs>https://github.com/mpusz/mp-units</docs><language>en</language> <pubDate>Fri, 20 Jun 2025 15:24:15 -0000</pubDate> <lastBuildDate>Fri, 20 Jun 2025 15:24:15 -0000</lastBuildDate> <ttl>1440</ttl> <generator>MkDocs RSS plugin - v1.17.3</generator> <image> <url>None</url> <title>mp-units</title><link>https://mpusz.github.io/mp-units/HEAD/</link> </image> <item> <title>Introducing absolute quantities</title> <author>Mateusz Pusz</author> <category>Metrology</category> <description><h1>Introducing absolute quantities</h1><p>This post introduces a new abstraction called an absolute quantity. It complements affinespace abstractions (point and delta) and will most probably be a new default in the librarywhen we release V3.</p></description><link>https://mpusz.github.io/mp-units/HEAD/blog/2025/06/16/introducing-absolute-quantities/</link> <pubDate>Mon, 16 Jun 2025 00:00:00 +0000</pubDate><source url="https://mpusz.github.io/mp-units/HEAD/feed_rss_created.xml">mp-units</source><guid isPermaLink="true">https://mpusz.github.io/mp-units/HEAD/blog/2025/06/16/introducing-absolute-quantities/</guid> <enclosure url="https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/introducing-absolute-quantities.png" type="image/png" length="39574" /> </item> <item> <title>Bringing Quantity-Safety To The Next Level</title> <author>Mateusz Pusz</author> <category>Metrology</category> <description><h1>Bringing Quantity-Safety To The Next Level</h1><p>All quantities and units libraries need to be unit-safe. Most of the libraries on the market dothis correctly. Some of them are also dimension-safe, which adds another level of protection fortheir users.</p><p><strong>mp-units</strong> is probably the only library on the market that additionally is quantity-safe. Thisgives a new quality and possibilities. I've described the major idea behind it, implementationdetails, and benefits to the users in the <a href="isq-part-5-benefits.md">series of posts about the International System of Quantities</a>.</p><p>However, this is only the beginning. We've always planned more and worked on the extensions in ourfree time. In this post, I will describe:</p><ul><li>What a quantity character is?</li><li>The importance of using proper representation types for the quantities.</li><li>The power of providing character-specific operations for the quantities.</li><li>Discuss implementation challenges and possible solutions.</li></ul></description><link>https://mpusz.github.io/mp-units/HEAD/blog/2025/01/15/bringing-quantity-safety-to-the-next-level/</link> <pubDate>Wed, 15 Jan 2025 00:00:00 +0000</pubDate><source url="https://mpusz.github.io/mp-units/HEAD/feed_rss_created.xml">mp-units</source><guid isPermaLink="true">https://mpusz.github.io/mp-units/HEAD/blog/2025/01/15/bringing-quantity-safety-to-the-next-level/</guid> <enclosure url="https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/bringing-quantity-safety-to-the-next-level.png" type="image/png" length="45128" /> </item> <item> <title>Report from the Wrocław 2024 ISO C++ Committee meeting</title> <author>Mateusz Pusz</author> <category>WG21 Updates</category> <description><h1>Report from the Wrocław 2024 ISO C++ Committee meeting</h1><p>The Wrocław 2024 meeting was another efficient step in the standardization of this library.We've spent the entire day on the joint LEWGI and SG6 discussion and got lots of feedback.We've also introduced <code>std::fixed_string</code> to LEWG for C++26.</p></description><link>https://mpusz.github.io/mp-units/HEAD/blog/2024/11/25/report-from-the-wroc%C5%82aw-2024-iso-c-committee-meeting/</link> <pubDate>Mon, 25 Nov 2024 00:00:00 +0000</pubDate><source url="https://mpusz.github.io/mp-units/HEAD/feed_rss_created.xml">mp-units</source><guid isPermaLink="true">https://mpusz.github.io/mp-units/HEAD/blog/2024/11/25/report-from-the-wroc%C5%82aw-2024-iso-c-committee-meeting/</guid> <enclosure url="https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/wrocław-2024-report.png" type="image/png" length="53358" /> </item> <item> <title>International System of Quantities (ISQ): Part 6 - Challenges</title> <author>Mateusz Pusz</author> <category>Metrology</category> <description><h1>International System of Quantities (ISQ): Part 6 - Challenges</h1><p>This arLine truncated
|
||||
@@ -1 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"> <channel><title>mp-units</title><description>The quantities and units library for C++</description><link>https://mpusz.github.io/mp-units/HEAD/</link><atom:link href="https://mpusz.github.io/mp-units/HEAD/feed_rss_updated.xml" rel="self" type="application/rss+xml" /><managingEditor>mp-units Team</managingEditor><docs>https://github.com/mpusz/mp-units</docs><language>en</language> <pubDate>Fri, 20 Jun 2025 09:00:50 -0000</pubDate> <lastBuildDate>Fri, 20 Jun 2025 09:00:50 -0000</lastBuildDate> <ttl>1440</ttl> <generator>MkDocs RSS plugin - v1.17.3</generator> <image> <url>None</url> <title>mp-units</title><link>https://mpusz.github.io/mp-units/HEAD/</link> </image> <item> <title>Introducing absolute quantities</title> <author>Mateusz Pusz</author> <category>Metrology</category> <description><h1>Introducing absolute quantities</h1><p>This post introduces a new abstraction called an absolute quantity. It complements affinespace abstractions (point and delta) and will most probably be a new default in the librarywhen we release V3.</p></description><link>https://mpusz.github.io/mp-units/HEAD/blog/2025/06/16/introducing-absolute-quantities/</link> <pubDate>Wed, 18 Jun 2025 05:35:59 +0000</pubDate><source url="https://mpusz.github.io/mp-units/HEAD/feed_rss_updated.xml">mp-units</source><guid isPermaLink="true">https://mpusz.github.io/mp-units/HEAD/blog/2025/06/16/introducing-absolute-quantities/</guid> <enclosure url="https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/introducing-absolute-quantities.png" type="image/png" length="None" /> </item> <item> <title>Bringing Quantity-Safety To The Next Level</title> <author>Mateusz Pusz</author> <category>Metrology</category> <description><h1>Bringing Quantity-Safety To The Next Level</h1><p>All quantities and units libraries need to be unit-safe. Most of the libraries on the market dothis correctly. Some of them are also dimension-safe, which adds another level of protection fortheir users.</p><p><strong>mp-units</strong> is probably the only library on the market that additionally is quantity-safe. Thisgives a new quality and possibilities. I've described the major idea behind it, implementationdetails, and benefits to the users in the <a href="isq-part-5-benefits.md">series of posts about the International System of Quantities</a>.</p><p>However, this is only the beginning. We've always planned more and worked on the extensions in ourfree time. In this post, I will describe:</p><ul><li>What a quantity character is?</li><li>The importance of using proper representation types for the quantities.</li><li>The power of providing character-specific operations for the quantities.</li><li>Discuss implementation challenges and possible solutions.</li></ul></description><link>https://mpusz.github.io/mp-units/HEAD/blog/2025/01/15/bringing-quantity-safety-to-the-next-level/</link> <pubDate>Tue, 11 Feb 2025 16:26:19 +0000</pubDate><source url="https://mpusz.github.io/mp-units/HEAD/feed_rss_updated.xml">mp-units</source><guid isPermaLink="true">https://mpusz.github.io/mp-units/HEAD/blog/2025/01/15/bringing-quantity-safety-to-the-next-level/</guid> <enclosure url="https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/bringing-quantity-safety-to-the-next-level.png" type="image/png" length="None" /> </item> <item> <title>International System of Quantities (ISQ): Part 4 - Implementing ISQ</title> <author>Mateusz Pusz</author> <category>Metrology</category> <description><h1>International System of Quantities (ISQ): Part 4 - Implementing ISQ</h1><p>Up until now, we have introduced the International System of Quantities and described how we canmodel its main aspects. This article will present how to implement those models in a programminglanguage, and we will point out some of the first issues that stand in our way.</p></description><link>https://mpusz.github.io/mp-units/HEAD/blog/2024/10/28/international-system-of-quantities-isq-part-4---implementing-isq/</link> <pubDate>Tue, 11 Feb 2025 16:26:19 +0000</pubDate><source url="https://mpusz.github.io/mp-units/HEAD/feed_rss_updated.xml">mp-units</source><guid isPermaLink="true">https://mpusz.github.io/mp-units/HEAD/blog/2024/10/28/international-system-of-quantities-isq-part-4---implementing-isq/</guid> <enclosure url="https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/isq-part-4-implemeting-isq.png" type="image/png" length="None" /> </item> <item> <title>International System of Quantities (ISQ): Part 6 - Challenges</title> <author>Mateusz Pusz</author> <category>Metrology</category> <description><h1>International System of Quantities (ISQ): Part 6 - CLine truncated
|
||||
<?xml version="1.0" encoding="UTF-8" ?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"> <channel><title>mp-units</title><description>The quantities and units library for C++</description><link>https://mpusz.github.io/mp-units/HEAD/</link><atom:link href="https://mpusz.github.io/mp-units/HEAD/feed_rss_updated.xml" rel="self" type="application/rss+xml" /><managingEditor>mp-units Team</managingEditor><docs>https://github.com/mpusz/mp-units</docs><language>en</language> <pubDate>Fri, 20 Jun 2025 15:24:15 -0000</pubDate> <lastBuildDate>Fri, 20 Jun 2025 15:24:15 -0000</lastBuildDate> <ttl>1440</ttl> <generator>MkDocs RSS plugin - v1.17.3</generator> <image> <url>None</url> <title>mp-units</title><link>https://mpusz.github.io/mp-units/HEAD/</link> </image> <item> <title>International System of Quantities (ISQ): Part 3 - Modeling ISQ</title> <author>Mateusz Pusz</author> <category>Metrology</category> <description><h1>International System of Quantities (ISQ): Part 3 - Modeling ISQ</h1><p>The physical units libraries on the market typically only focus on modeling one or more systemsof units. However, as we have learned, this is not the only system kind to model. Another,and maybe even more important, is a system of quantities. The most important example here isthe International System of Quantities (ISQ) defined by ISO/IEC 80000.</p><p>This article continues our series about the International System of Quantities. This time, we willlearn about the main ideas behind the ISQ and describe how it can be modelled in a programminglanguage.</p></description><link>https://mpusz.github.io/mp-units/HEAD/blog/2024/10/21/international-system-of-quantities-isq-part-3---modeling-isq/</link> <pubDate>Fri, 20 Jun 2025 15:20:57 +0000</pubDate><source url="https://mpusz.github.io/mp-units/HEAD/feed_rss_updated.xml">mp-units</source><guid isPermaLink="true">https://mpusz.github.io/mp-units/HEAD/blog/2024/10/21/international-system-of-quantities-isq-part-3---modeling-isq/</guid> <enclosure url="https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/isq-part-3-modeling-isq.png" type="image/png" length="52250" /> </item> <item> <title>Introducing absolute quantities</title> <author>Mateusz Pusz</author> <category>Metrology</category> <description><h1>Introducing absolute quantities</h1><p>This post introduces a new abstraction called an absolute quantity. It complements affinespace abstractions (point and delta) and will most probably be a new default in the librarywhen we release V3.</p></description><link>https://mpusz.github.io/mp-units/HEAD/blog/2025/06/16/introducing-absolute-quantities/</link> <pubDate>Wed, 18 Jun 2025 05:35:59 +0000</pubDate><source url="https://mpusz.github.io/mp-units/HEAD/feed_rss_updated.xml">mp-units</source><guid isPermaLink="true">https://mpusz.github.io/mp-units/HEAD/blog/2025/06/16/introducing-absolute-quantities/</guid> <enclosure url="https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/introducing-absolute-quantities.png" type="image/png" length="39574" /> </item> <item> <title>Bringing Quantity-Safety To The Next Level</title> <author>Mateusz Pusz</author> <category>Metrology</category> <description><h1>Bringing Quantity-Safety To The Next Level</h1><p>All quantities and units libraries need to be unit-safe. Most of the libraries on the market dothis correctly. Some of them are also dimension-safe, which adds another level of protection fortheir users.</p><p><strong>mp-units</strong> is probably the only library on the market that additionally is quantity-safe. Thisgives a new quality and possibilities. I've described the major idea behind it, implementationdetails, and benefits to the users in the <a href="isq-part-5-benefits.md">series of posts about the International System of Quantities</a>.</p><p>However, this is only the beginning. We've always planned more and worked on the extensions in ourfree time. In this post, I will describe:</p><ul><li>What a quantity character is?</li><li>The importance of using proper representation types for the quantities.</li><li>The power of providing character-specific operations for the quantities.</li><li>Discuss implementation challenges and possible solutions.</li></ul></description><link>https://mpusz.github.io/mp-units/HEAD/blog/2025/01/15/bringing-quantity-safety-to-the-next-level/</link> <pubDate>Tue, 11 Feb 2025 16:26:19 +0000</pubDate><source url="https://mpusz.github.io/mp-units/HEAD/feed_rss_updated.xml">mp-units</source><guid isPermaLink="true">https://mpusz.github.io/mp-units/HEAD/blog/2025/01/15/bringing-quantity-safety-to-the-next-level/</guid> <enclosure url="https://mpusz.github.io/mp-units/HEADassets/images/social/blog/posts/bringing-quantity-safety-to-theLine truncated
|
||||
@@ -1 +1 @@
|
||||
{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Welcome to mp-units!","text":"<p>mp-units is a compile-time enabled feature-rich Modern C++ modular/header-only library that provides compile-time dimensional analysis and unit/quantity manipulation. Its key strengths include safety, performance, and developer experience.</p> <p>It is the first library on the market that, besides being unit-safe and dimension-safe, is also quantity-safe.</p> <p>The library source code is hosted on GitHub with a permissive MIT license.</p> Supported compilers <p>This library tries to provide the best user experience possible with the C++ language. To achieve that, it extensively uses the latest C++ language features.</p> <p>Even though the library benefits from the latest C++ versions (if available), C++20 is enough to compile and use all of the library's functionality.</p> <p>Please refer to C++ compiler support chapter for more details.</p> C++ modulesHeader files <pre><code>#include <iostream>\n#include <print>\nimport mp_units;\n\nusing namespace mp_units;\n\ninline constexpr struct smoot final : named_unit<\"smoot\", mag<67> * usc::inch> {} smoot;\n\nint main()\n{\n constexpr quantity dist = 364.4 * smoot;\n std::println(\"Harvard Bridge length = {::N[.1f]} ({::N[.1f]}, {::N[.2f]}) \u00b1 1 \u03b5ar\",\n dist, dist.in(usc::foot), dist.in(si::metre));\n}\n</code></pre> <pre><code>#include <mp-units/systems/si.h>\n#include <mp-units/systems/usc.h>\n#include <print>\n\nusing namespace mp_units;\n\ninline constexpr struct smoot final : named_unit<\"smoot\", mag<67> * usc::inch> {} smoot;\n\nint main()\n{\n constexpr quantity dist = 364.4 * smoot;\n std::println(\"Harvard Bridge length = {::N[.1f]} ({::N[.1f]}, {::N[.2f]}) \u00b1 1 \u03b5ar\",\n dist, dist.in(usc::foot), dist.in(si::metre));\n}\n</code></pre> <p>Output:</p> <pre><code>Harvard Bridge length = 364.4 smoot (2034.6 ft, 620.14 m) \u00b1 1 \u03b5ar\n</code></pre> <p>Try it on Compiler Explorer</p> What is <code>smoot</code>? <p>The smoot (/\u02c8smu\u02d0t/) is a nonstandard unit of length created as part of an MIT fraternity prank. It is named after Oliver R. Smoot, a fraternity pledge to Lambda Chi Alpha, who, in October 1958, lay on the Harvard Bridge (between Boston and Cambridge, Massachusetts) and was used by his fraternity brothers to measure the length of the bridge.</p> <p>One smoot equals Oliver Smoot's height at the time of the prank (five feet and seven inches). The bridge's length was measured to be 364.4 smoots plus or minus one ear, with the \"plus or minus\" intended to express the measurement uncertainty.</p> <p>Oliver Smoot graduated from MIT with the class of 1962, became a lawyer, and later became chairman of the American National Standards Institute (ANSI) and president of the International Organization for Standardization (ISO).</p> <p>More on the smoot unit of length can be found at https://en.wikipedia.org/wiki/Smoot.</p> <p>Important: Help needed!</p> <p>The mp-units library might be the subject of ISO standardization for C++29. More on this can be found in the following ISO C++ proposals:</p> <ul> <li>P1935: A C++ Approach to Physical Units,</li> <li>P2980: A motivation, scope, and plan for a physical quantities and units library,</li> <li>P3045: Quantities and units library.</li> </ul> <p>We are actively looking for parties interested in field-trialing the library.</p>"},{"location":"api_reference/","title":"API Reference - mp-units","text":""},{"location":"release_notes/","title":"Release Notes","text":""},{"location":"release_notes/#mp-units","title":"mp-units","text":""},{"location":"release_notes/#2.5.0","title":"2.5.0 WIP","text":"<ul> <li>(!) feat: representation concepts improved</li> <li>(!) feat: <code>representation_of</code> concept now also accepts a <code>quantity_spec</code> and accepts any representation character for quantity kinds</li> <li>(!) feat: <code>quantity::one()</code> removed</li> <li>(!) feat: <code>Representation</code> concept removed</li> <li>feat: <code>SymbolicArg</code> applied to expression templates</li> <li>feat: <code>per</code> and <code>power</code> made <code>final</code></li> <li>feat: <code>derived_XXX</code> are now constrained with <code>SymbolicConstant</code></li> <li>feat: prime factorization extended to any magnitude (thanks @chiphogg)</li> <li>feat: <code>cartesian_vector</code> added</li> <li>feat: <code>equivalent</code> now accept any units (even non-convertible)</li> <li>feat: text output should fallback to the portable mode when UTF-8 is not used for <code>text_encoding</code></li> <li>feat: precondition added to <code>to_u8string</code></li> <li>feat: text output of scaled units is now enclosed in parenthesis <code>(...)</code> instead of brackets <code>[...]</code></li> <li>feat: <code>abs(quantity)</code> exposed for conforming freestaLine truncated
|
||||
{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Welcome to mp-units!","text":"<p>mp-units is a compile-time enabled feature-rich Modern C++ modular/header-only library that provides compile-time dimensional analysis and unit/quantity manipulation. Its key strengths include safety, performance, and developer experience.</p> <p>It is the first library on the market that, besides being unit-safe and dimension-safe, is also quantity-safe.</p> <p>The library source code is hosted on GitHub with a permissive MIT license.</p> Supported compilers <p>This library tries to provide the best user experience possible with the C++ language. To achieve that, it extensively uses the latest C++ language features.</p> <p>Even though the library benefits from the latest C++ versions (if available), C++20 is enough to compile and use all of the library's functionality.</p> <p>Please refer to C++ compiler support chapter for more details.</p> C++ modulesHeader files <pre><code>#include <iostream>\n#include <print>\nimport mp_units;\n\nusing namespace mp_units;\n\ninline constexpr struct smoot final : named_unit<\"smoot\", mag<67> * usc::inch> {} smoot;\n\nint main()\n{\n constexpr quantity dist = 364.4 * smoot;\n std::println(\"Harvard Bridge length = {::N[.1f]} ({::N[.1f]}, {::N[.2f]}) \u00b1 1 \u03b5ar\",\n dist, dist.in(usc::foot), dist.in(si::metre));\n}\n</code></pre> <pre><code>#include <mp-units/systems/si.h>\n#include <mp-units/systems/usc.h>\n#include <print>\n\nusing namespace mp_units;\n\ninline constexpr struct smoot final : named_unit<\"smoot\", mag<67> * usc::inch> {} smoot;\n\nint main()\n{\n constexpr quantity dist = 364.4 * smoot;\n std::println(\"Harvard Bridge length = {::N[.1f]} ({::N[.1f]}, {::N[.2f]}) \u00b1 1 \u03b5ar\",\n dist, dist.in(usc::foot), dist.in(si::metre));\n}\n</code></pre> <p>Output:</p> <pre><code>Harvard Bridge length = 364.4 smoot (2034.6 ft, 620.14 m) \u00b1 1 \u03b5ar\n</code></pre> <p>Try it on Compiler Explorer</p> What is <code>smoot</code>? <p>The smoot (/\u02c8smu\u02d0t/) is a nonstandard unit of length created as part of an MIT fraternity prank. It is named after Oliver R. Smoot, a fraternity pledge to Lambda Chi Alpha, who, in October 1958, lay on the Harvard Bridge (between Boston and Cambridge, Massachusetts) and was used by his fraternity brothers to measure the length of the bridge.</p> <p>One smoot equals Oliver Smoot's height at the time of the prank (five feet and seven inches). The bridge's length was measured to be 364.4 smoots plus or minus one ear, with the \"plus or minus\" intended to express the measurement uncertainty.</p> <p>Oliver Smoot graduated from MIT with the class of 1962, became a lawyer, and later became chairman of the American National Standards Institute (ANSI) and president of the International Organization for Standardization (ISO).</p> <p>More on the smoot unit of length can be found at https://en.wikipedia.org/wiki/Smoot.</p> <p>Important: Help needed!</p> <p>The mp-units library might be the subject of ISO standardization for C++29. More on this can be found in the following ISO C++ proposals:</p> <ul> <li>P1935: A C++ Approach to Physical Units,</li> <li>P2980: A motivation, scope, and plan for a physical quantities and units library,</li> <li>P3045: Quantities and units library.</li> </ul> <p>We are actively looking for parties interested in field-trialing the library.</p>"},{"location":"api_reference/","title":"API Reference - mp-units","text":""},{"location":"release_notes/","title":"Release Notes","text":""},{"location":"release_notes/#mp-units","title":"mp-units","text":""},{"location":"release_notes/#2.5.0","title":"2.5.0 WIP","text":"<ul> <li>(!) feat: representation concepts improved</li> <li>(!) feat: <code>representation_of</code> concept now also accepts a <code>quantity_spec</code> and accepts any representation character for quantity kinds</li> <li>(!) feat: <code>quantity::one()</code> removed</li> <li>(!) feat: <code>Representation</code> concept removed</li> <li>feat: <code>SymbolicArg</code> applied to expression templates</li> <li>feat: <code>per</code> and <code>power</code> made <code>final</code></li> <li>feat: <code>derived_XXX</code> are now constrained with <code>SymbolicConstant</code></li> <li>feat: prime factorization extended to any magnitude (thanks @chiphogg)</li> <li>feat: <code>cartesian_vector</code> added</li> <li>feat: <code>equivalent</code> now accept any units (even non-convertible)</li> <li>feat: text output should fallback to the portable mode when UTF-8 is not used for <code>text_encoding</code></li> <li>feat: precondition added to <code>to_u8string</code></li> <li>feat: text output of scaled units is now enclosed in parenthesis <code>(...)</code> instead of brackets <code>[...]</code></li> <li>feat: <code>abs(quantity)</code> exposed for conforming freestaLine truncated
|
||||
@@ -2681,6 +2681,13 @@ the first common node in a hierarchy tree of the same kind. For example:</p>
|
||||
</span><span id="__span-6-2"><a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">radius</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">));</span>
|
||||
</span><span id="__span-6-3"><a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">radius</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">));</span>
|
||||
</span></code></pre></div>
|
||||
<p>Implicit conversions are allowed on copy-initialization:</p>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="kt">void</span><span class="w"> </span><span class="nf">foo</span><span class="p">(</span><span class="n">quantity</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">[</span><span class="n">m</span><span class="p">]</span><span class="o">></span><span class="w"> </span><span class="n">q</span><span class="p">);</span>
|
||||
</span></code></pre></div>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-8-1"><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="n">quantity</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">[</span><span class="n">m</span><span class="p">]</span><span class="o">></span><span class="w"> </span><span class="n">q1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">42</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">m</span><span class="p">;</span>
|
||||
</span><span id="__span-8-2"><a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a><span class="n">quantity</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">[</span><span class="n">m</span><span class="p">]</span><span class="o">></span><span class="w"> </span><span class="n">q2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">q1</span><span class="p">;</span><span class="w"> </span><span class="c1">// implicit quantity conversion</span>
|
||||
</span><span id="__span-8-3"><a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a><span class="n">foo</span><span class="p">(</span><span class="n">q1</span><span class="p">);</span><span class="w"> </span><span class="c1">// implicit quantity conversion</span>
|
||||
</span></code></pre></div>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Explicit conversions</strong></p>
|
||||
@@ -2688,12 +2695,21 @@ the first common node in a hierarchy tree of the same kind. For example:</p>
|
||||
<li>not every <em>length</em> is a <em>width</em></li>
|
||||
<li>not every <em>width</em> is a <em>radius</em></li>
|
||||
</ul>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">));</span>
|
||||
</span><span id="__span-7-2"><a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">radius</span><span class="p">));</span>
|
||||
</span><span id="__span-7-3"><a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">radius</span><span class="p">));</span>
|
||||
</span><span id="__span-7-4"><a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">));</span>
|
||||
</span><span id="__span-7-5"><a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">radius</span><span class="p">));</span>
|
||||
</span><span id="__span-7-6"><a id="__codelineno-7-6" name="__codelineno-7-6" href="#__codelineno-7-6"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">radius</span><span class="p">));</span>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-9-1"><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">));</span>
|
||||
</span><span id="__span-9-2"><a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">radius</span><span class="p">));</span>
|
||||
</span><span id="__span-9-3"><a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">radius</span><span class="p">));</span>
|
||||
</span><span id="__span-9-4"><a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">));</span>
|
||||
</span><span id="__span-9-5"><a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">radius</span><span class="p">));</span>
|
||||
</span><span id="__span-9-6"><a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">radius</span><span class="p">));</span>
|
||||
</span></code></pre></div>
|
||||
<p>Explicit conversions are forced by passing the quantity to a call operator of a <code>quantity_spec</code>
|
||||
type or by calling <code>quantity</code>'s explicit constructor:</p>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-10-1"><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="kt">void</span><span class="w"> </span><span class="nf">foo</span><span class="p">(</span><span class="n">quantity</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">[</span><span class="n">m</span><span class="p">]</span><span class="o">></span><span class="w"> </span><span class="n">q</span><span class="p">);</span>
|
||||
</span></code></pre></div>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-11-1"><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a><span class="n">quantity</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">[</span><span class="n">m</span><span class="p">]</span><span class="o">></span><span class="w"> </span><span class="n">q1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">42</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">m</span><span class="p">;</span>
|
||||
</span><span id="__span-11-2"><a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a><span class="n">quantity</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">[</span><span class="n">m</span><span class="p">]</span><span class="o">></span><span class="w"> </span><span class="n">q2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">(</span><span class="n">q1</span><span class="p">);</span><span class="w"> </span><span class="c1">// explicit quantity conversion</span>
|
||||
</span><span id="__span-11-3"><a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a><span class="n">quantity</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">[</span><span class="n">m</span><span class="p">]</span><span class="o">></span><span class="w"> </span><span class="n">q3</span><span class="p">(</span><span class="n">q1</span><span class="p">);</span><span class="w"> </span><span class="c1">// direct initialization</span>
|
||||
</span><span id="__span-11-4"><a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a><span class="n">foo</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">(</span><span class="n">q1</span><span class="p">));</span><span class="w"> </span><span class="c1">// explicit quantity conversion</span>
|
||||
</span></code></pre></div>
|
||||
</li>
|
||||
<li>
|
||||
@@ -2702,9 +2718,16 @@ the first common node in a hierarchy tree of the same kind. For example:</p>
|
||||
<li><em>height</em> is not a <em>width</em></li>
|
||||
<li>both <em>height</em> and <em>width</em> are quantities of kind <em>length</em></li>
|
||||
</ul>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-8-1"><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">));</span>
|
||||
</span><span id="__span-8-2"><a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">));</span>
|
||||
</span><span id="__span-8-3"><a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">castable</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">));</span>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-12-1"><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">));</span>
|
||||
</span><span id="__span-12-2"><a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">));</span>
|
||||
</span><span id="__span-12-3"><a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">castable</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">));</span>
|
||||
</span></code></pre></div>
|
||||
<p>Explicit casts are forced with a dedicated <code>quantity_cast</code> function:</p>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-13-1"><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a><span class="kt">void</span><span class="w"> </span><span class="nf">foo</span><span class="p">(</span><span class="n">quantity</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">[</span><span class="n">m</span><span class="p">]</span><span class="o">></span><span class="w"> </span><span class="n">q</span><span class="p">);</span>
|
||||
</span></code></pre></div>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-14-1"><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a><span class="n">quantity</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">[</span><span class="n">m</span><span class="p">]</span><span class="o">></span><span class="w"> </span><span class="n">q1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">42</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">m</span><span class="p">;</span>
|
||||
</span><span id="__span-14-2"><a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a><span class="n">quantity</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">[</span><span class="n">m</span><span class="p">]</span><span class="o">></span><span class="w"> </span><span class="n">q2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">quantity_cast</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="o">></span><span class="p">(</span><span class="n">q1</span><span class="p">);</span><span class="w"> </span><span class="c1">// explicit quantity cast</span>
|
||||
</span><span id="__span-14-3"><a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a><span class="n">foo</span><span class="p">(</span><span class="n">quantity_cast</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="o">></span><span class="p">(</span><span class="n">q1</span><span class="p">));</span><span class="w"> </span><span class="c1">// explicit quantity cast</span>
|
||||
</span></code></pre></div>
|
||||
</li>
|
||||
<li>
|
||||
@@ -2712,9 +2735,15 @@ the first common node in a hierarchy tree of the same kind. For example:</p>
|
||||
<ul>
|
||||
<li><em>time</em> has nothing in common with <em>length</em></li>
|
||||
</ul>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-9-1"><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">));</span>
|
||||
</span><span id="__span-9-2"><a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">));</span>
|
||||
</span><span id="__span-9-3"><a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">castable</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">));</span>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-15-1"><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">));</span>
|
||||
</span><span id="__span-15-2"><a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">));</span>
|
||||
</span><span id="__span-15-3"><a id="__codelineno-15-3" name="__codelineno-15-3" href="#__codelineno-15-3"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">castable</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">));</span>
|
||||
</span></code></pre></div>
|
||||
<p>Even the explicit casts will not force such a conversion:</p>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-16-1"><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a><span class="kt">void</span><span class="w"> </span><span class="nf">foo</span><span class="p">(</span><span class="n">quantity</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">[</span><span class="n">m</span><span class="p">]</span><span class="o">></span><span class="p">);</span>
|
||||
</span></code></pre></div>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-17-1"><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a><span class="n">quantity</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">[</span><span class="n">m</span><span class="p">]</span><span class="o">></span><span class="w"> </span><span class="n">q1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">42</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">s</span><span class="p">;</span><span class="w"> </span><span class="c1">// Compile-time error</span>
|
||||
</span><span id="__span-17-2"><a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a><span class="n">foo</span><span class="p">(</span><span class="n">quantity_cast</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="o">></span><span class="p">(</span><span class="mi">42</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">s</span><span class="p">));</span><span class="w"> </span><span class="c1">// Compile-time error</span>
|
||||
</span></code></pre></div>
|
||||
</li>
|
||||
</ol>
|
||||
@@ -2747,20 +2776,20 @@ that can be used to create them implicitly:</p>
|
||||
and <em>time</em>. As those are also the roots of quantities of their kinds and all other quantities from their
|
||||
trees are implicitly convertible to them (we agreed on that "every <em>width</em> is a <em>length</em>" already),
|
||||
it means that an <em>energy</em> can be implicitly constructed from any quantity of <em>mass</em>, <em>length</em>, and <em>time</em>:</p>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-10-1"><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">mass</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">),</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">energy</span><span class="p">));</span>
|
||||
</span><span id="__span-10-2"><a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">mass</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">),</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">energy</span><span class="p">));</span>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-18-1"><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">mass</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">),</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">energy</span><span class="p">));</span>
|
||||
</span><span id="__span-18-2"><a id="__codelineno-18-2" name="__codelineno-18-2" href="#__codelineno-18-2"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">mass</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">),</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">energy</span><span class="p">));</span>
|
||||
</span></code></pre></div>
|
||||
</li>
|
||||
<li>
|
||||
<p><em>mechanical energy</em> is a more "specialized" quantity than <em>energy</em> (not every <em>energy</em> is
|
||||
a <em>mechanical energy</em>). It is why an explicit cast is needed to convert from either <em>energy</em> or
|
||||
the results of its <a href="../../../appendix/glossary/#quantity-equation">quantity equation</a>:</p>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-11-1"><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">energy</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">mechanical_energy</span><span class="p">));</span>
|
||||
</span><span id="__span-11-2"><a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">energy</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">mechanical_energy</span><span class="p">));</span>
|
||||
</span><span id="__span-11-3"><a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">mass</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">),</span>
|
||||
</span><span id="__span-11-4"><a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">mechanical_energy</span><span class="p">));</span>
|
||||
</span><span id="__span-11-5"><a id="__codelineno-11-5" name="__codelineno-11-5" href="#__codelineno-11-5"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">mass</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">),</span>
|
||||
</span><span id="__span-11-6"><a id="__codelineno-11-6" name="__codelineno-11-6" href="#__codelineno-11-6"></a><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">mechanical_energy</span><span class="p">));</span>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-19-1"><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">energy</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">mechanical_energy</span><span class="p">));</span>
|
||||
</span><span id="__span-19-2"><a id="__codelineno-19-2" name="__codelineno-19-2" href="#__codelineno-19-2"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">energy</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">mechanical_energy</span><span class="p">));</span>
|
||||
</span><span id="__span-19-3"><a id="__codelineno-19-3" name="__codelineno-19-3" href="#__codelineno-19-3"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">mass</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">),</span>
|
||||
</span><span id="__span-19-4"><a id="__codelineno-19-4" name="__codelineno-19-4" href="#__codelineno-19-4"></a><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">mechanical_energy</span><span class="p">));</span>
|
||||
</span><span id="__span-19-5"><a id="__codelineno-19-5" name="__codelineno-19-5" href="#__codelineno-19-5"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">mass</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">),</span>
|
||||
</span><span id="__span-19-6"><a id="__codelineno-19-6" name="__codelineno-19-6" href="#__codelineno-19-6"></a><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">mechanical_energy</span><span class="p">));</span>
|
||||
</span></code></pre></div>
|
||||
</li>
|
||||
<li>
|
||||
@@ -2769,14 +2798,14 @@ that can be used to create them implicitly:</p>
|
||||
<a href="../../../appendix/glossary/#quantity-equation">quantity equation</a>. Maybe not every
|
||||
<code>mass * pow<2>(length) / pow<2>(time)</code> is a <em>gravitational potential energy</em>, but every
|
||||
<code>mass * acceleration_of_free_fall * height</code> is.</p>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-12-1"><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">energy</span><span class="p">,</span><span class="w"> </span><span class="n">gravitational_potential_energy</span><span class="p">));</span>
|
||||
</span><span id="__span-12-2"><a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">energy</span><span class="p">,</span><span class="w"> </span><span class="n">gravitational_potential_energy</span><span class="p">));</span>
|
||||
</span><span id="__span-12-3"><a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">mass</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">),</span>
|
||||
</span><span id="__span-12-4"><a id="__codelineno-12-4" name="__codelineno-12-4" href="#__codelineno-12-4"></a><span class="w"> </span><span class="n">gravitational_potential_energy</span><span class="p">));</span>
|
||||
</span><span id="__span-12-5"><a id="__codelineno-12-5" name="__codelineno-12-5" href="#__codelineno-12-5"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">mass</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">),</span>
|
||||
</span><span id="__span-12-6"><a id="__codelineno-12-6" name="__codelineno-12-6" href="#__codelineno-12-6"></a><span class="w"> </span><span class="n">gravitational_potential_energy</span><span class="p">));</span>
|
||||
</span><span id="__span-12-7"><a id="__codelineno-12-7" name="__codelineno-12-7" href="#__codelineno-12-7"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">mass</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">acceleration_of_free_fall</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">,</span>
|
||||
</span><span id="__span-12-8"><a id="__codelineno-12-8" name="__codelineno-12-8" href="#__codelineno-12-8"></a><span class="w"> </span><span class="n">gravitational_potential_energy</span><span class="p">));</span>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-20-1"><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">energy</span><span class="p">,</span><span class="w"> </span><span class="n">gravitational_potential_energy</span><span class="p">));</span>
|
||||
</span><span id="__span-20-2"><a id="__codelineno-20-2" name="__codelineno-20-2" href="#__codelineno-20-2"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">energy</span><span class="p">,</span><span class="w"> </span><span class="n">gravitational_potential_energy</span><span class="p">));</span>
|
||||
</span><span id="__span-20-3"><a id="__codelineno-20-3" name="__codelineno-20-3" href="#__codelineno-20-3"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">mass</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">),</span>
|
||||
</span><span id="__span-20-4"><a id="__codelineno-20-4" name="__codelineno-20-4" href="#__codelineno-20-4"></a><span class="w"> </span><span class="n">gravitational_potential_energy</span><span class="p">));</span>
|
||||
</span><span id="__span-20-5"><a id="__codelineno-20-5" name="__codelineno-20-5" href="#__codelineno-20-5"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">explicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">mass</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">pow</span><span class="o"><</span><span class="mi">2</span><span class="o">></span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">),</span>
|
||||
</span><span id="__span-20-6"><a id="__codelineno-20-6" name="__codelineno-20-6" href="#__codelineno-20-6"></a><span class="w"> </span><span class="n">gravitational_potential_energy</span><span class="p">));</span>
|
||||
</span><span id="__span-20-7"><a id="__codelineno-20-7" name="__codelineno-20-7" href="#__codelineno-20-7"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">mass</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">acceleration_of_free_fall</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">,</span>
|
||||
</span><span id="__span-20-8"><a id="__codelineno-20-8" name="__codelineno-20-8" href="#__codelineno-20-8"></a><span class="w"> </span><span class="n">gravitational_potential_energy</span><span class="p">));</span>
|
||||
</span></code></pre></div>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -2793,16 +2822,16 @@ to type <code>kind_of<isq::length></code>.</p>
|
||||
</div>
|
||||
<p>Such an entity behaves as any quantity of its kind. This means that it is implicitly
|
||||
convertible to any quantity in a tree.</p>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-13-1"><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">));</span>
|
||||
</span><span id="__span-13-2"><a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">kind_of</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="o">></span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">));</span>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-21-1"><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">));</span>
|
||||
</span><span id="__span-21-2"><a id="__codelineno-21-2" name="__codelineno-21-2" href="#__codelineno-21-2"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">implicitly_convertible</span><span class="p">(</span><span class="n">kind_of</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="o">></span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">height</span><span class="p">));</span>
|
||||
</span></code></pre></div>
|
||||
<p>Additionally, the result of operations on quantity kinds is also a quantity kind:</p>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-14-1"><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">same_type</span><span class="o"><</span><span class="n">kind_of</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="o">></span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">kind_of</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="o">></span><span class="p">,</span><span class="w"> </span><span class="n">kind_of</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="o">>></span><span class="p">);</span>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-22-1"><a id="__codelineno-22-1" name="__codelineno-22-1" href="#__codelineno-22-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">same_type</span><span class="o"><</span><span class="n">kind_of</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="o">></span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">kind_of</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="o">></span><span class="p">,</span><span class="w"> </span><span class="n">kind_of</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="o">>></span><span class="p">);</span>
|
||||
</span></code></pre></div>
|
||||
<p>However, if at least one equation's operand is not a quantity kind, the result becomes a "strong"
|
||||
quantity where all the kinds are converted to the hierarchy tree's root quantities:</p>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-15-1"><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">same_type</span><span class="o"><</span><span class="n">kind_of</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="o">></span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">,</span><span class="w"> </span><span class="n">kind_of</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="o">>></span><span class="p">);</span>
|
||||
</span><span id="__span-15-2"><a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">same_type</span><span class="o"><</span><span class="n">kind_of</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="o">></span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="o">></span><span class="p">);</span>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-23-1"><a id="__codelineno-23-1" name="__codelineno-23-1" href="#__codelineno-23-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="o">!</span><span class="n">same_type</span><span class="o"><</span><span class="n">kind_of</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="o">></span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">,</span><span class="w"> </span><span class="n">kind_of</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="o">>></span><span class="p">);</span>
|
||||
</span><span id="__span-23-2"><a id="__codelineno-23-2" name="__codelineno-23-2" href="#__codelineno-23-2"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">same_type</span><span class="o"><</span><span class="n">kind_of</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="o">></span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="p">,</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">isq</span><span class="o">::</span><span class="n">time</span><span class="o">></span><span class="p">);</span>
|
||||
</span></code></pre></div>
|
||||
<div class="admonition info">
|
||||
<p class="admonition-title">Info</p>
|
||||
@@ -2810,7 +2839,7 @@ quantity where all the kinds are converted to the hierarchy tree's root quantiti
|
||||
in the <code>quantity_spec</code> definition can be put as a template parameter to the <code>kind_of</code>
|
||||
specifier. For example, <code>kind_of<isq::width></code> will fail to compile. However, we can call
|
||||
<code>get_kind(q)</code> to obtain a kind of any quantity:</p>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-16-1"><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">get_kind</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">kind_of</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="o">></span><span class="p">);</span>
|
||||
<div class="language-cpp highlight"><pre><span></span><code><span id="__span-24-1"><a id="__codelineno-24-1" name="__codelineno-24-1" href="#__codelineno-24-1"></a><span class="k">static_assert</span><span class="p">(</span><span class="n">get_kind</span><span class="p">(</span><span class="n">isq</span><span class="o">::</span><span class="n">width</span><span class="p">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">kind_of</span><span class="o"><</span><span class="n">isq</span><span class="o">::</span><span class="n">length</span><span class="o">></span><span class="p">);</span>
|
||||
</span></code></pre></div>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in new issue
Block a user