2024-11-05 18:52:17 +01:00
<!doctype html>
< html lang = "en" class = "no-js" >
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width,initial-scale=1" >
< meta name = "description" content = "The quantities and units library for C++" >
< meta name = "author" content = "mp-units Team" >
< link rel = "canonical" href = "https://mpusz.github.io/mp-units/2.4/release_notes/" >
< link rel = "prev" href = "../blog/archive/2023/" >
< link rel = "alternate" type = "application/rss+xml" title = "RSS feed" href = "../feed_rss_created.xml" >
< link rel = "alternate" type = "application/rss+xml" title = "RSS feed of updated content" href = "../feed_rss_updated.xml" >
< link rel = "icon" href = "../assets/images/mp-units-color.svg" >
< meta name = "generator" content = "mkdocs-1.6.1, mkdocs-material-9.5.43" >
< title > Release Notes - mp-units</ title >
< link rel = "stylesheet" href = "../assets/stylesheets/main.0253249f.min.css" >
< link rel = "stylesheet" href = "../assets/stylesheets/palette.06af60db.min.css" >
< link rel = "preconnect" href = "https://fonts.gstatic.com" crossorigin >
< link rel = "stylesheet" href = "https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback" >
< style >: root { --md-text-font : "Roboto" ; --md-code-font : "Roboto Mono" }</ style >
< link rel = "stylesheet" href = "../stylesheets/extra.css" >
< script > __md_scope = new URL ( ".." , location ), __md_hash = e =>[... e ]. reduce ((( e , _ )=>( e << 5 ) - e + _ . charCodeAt ( 0 )), 0 ), __md_get = ( e , _ = localStorage , t = __md_scope )=> JSON . parse ( _ . getItem ( t . pathname + "." + e )), __md_set = ( e , _ , t = localStorage , a = __md_scope )=>{ try { t . setItem ( a . pathname + "." + e , JSON . stringify ( _ ))} catch ( e ){}}</ script >
< meta property = "og:type" content = "website" >
< meta property = "og:title" content = "Release Notes - mp-units" >
< meta property = "og:description" content = "The quantities and units library for C++" >
< meta property = "og:image" content = "https://mpusz.github.io/mp-units/2.4/assets/images/social/release_notes.png" >
< meta property = "og:image:type" content = "image/png" >
< meta property = "og:image:width" content = "1200" >
< meta property = "og:image:height" content = "630" >
< meta property = "og:url" content = "https://mpusz.github.io/mp-units/2.4/release_notes/" >
< meta name = "twitter:card" content = "summary_large_image" >
< meta name = "twitter:title" content = "Release Notes - mp-units" >
< meta name = "twitter:description" content = "The quantities and units library for C++" >
< meta name = "twitter:image" content = "https://mpusz.github.io/mp-units/2.4/assets/images/social/release_notes.png" >
</ head >
< body dir = "ltr" data-md-color-scheme = "default" data-md-color-primary = "indigo" data-md-color-accent = "indigo" >
< input class = "md-toggle" data-md-toggle = "drawer" type = "checkbox" id = "__drawer" autocomplete = "off" >
< input class = "md-toggle" data-md-toggle = "search" type = "checkbox" id = "__search" autocomplete = "off" >
< label class = "md-overlay" for = "__drawer" ></ label >
< div data-md-component = "skip" >
< a href = "#release-notes" class = "md-skip" >
Skip to content
</ a >
</ div >
< div data-md-component = "announce" >
</ div >
< div data-md-color-scheme = "default" data-md-component = "outdated" hidden >
< aside class = "md-banner md-banner--warning" >
< div class = "md-banner__inner md-grid md-typeset" >
You're not viewing the latest version.
< a href = "../.." >
< strong > Click here to go to latest.</ strong >
</ a >
</ div >
< script > var el = document . querySelector ( "[data-md-component=outdated]" ), outdated = __md_get ( "__outdated" , sessionStorage ); ! 0 === outdated && el && ( el . hidden =! 1 )</ script >
</ aside >
</ div >
< header class = "md-header" data-md-component = "header" >
< nav class = "md-header__inner md-grid" aria-label = "Header" >
< a href = ".." title = "mp-units" class = "md-header__button md-logo" aria-label = "mp-units" data-md-component = "logo" >
< img src = "../assets/images/mp-units-transparent-white.svg" alt = "logo" >
</ a >
< label class = "md-header__button md-icon" for = "__drawer" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" >< path d = "M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z" /></ svg >
</ label >
< div class = "md-header__title" data-md-component = "header-title" >
< div class = "md-header__ellipsis" >
< div class = "md-header__topic" >
< span class = "md-ellipsis" >
mp-units
</ span >
</ div >
< div class = "md-header__topic" data-md-component = "header-topic" >
< span class = "md-ellipsis" >
Release Notes
</ span >
</ div >
</ div >
</ div >
< form class = "md-header__option" data-md-component = "palette" >
< input class = "md-option" data-md-color-media = "(prefers-color-scheme)" data-md-color-scheme = "default" data-md-color-primary = "indigo" data-md-color-accent = "indigo" aria-label = "Switch to light mode" type = "radio" name = "__palette" id = "__palette_0" >
< label class = "md-header__button md-icon" title = "Switch to light mode" for = "__palette_1" hidden >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" >< path d = "M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1M8 13h8v-2H8zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4a5 5 0 0 0 5-5 5 5 0 0 0-5-5" /></ svg >
</ label >
< input class = "md-option" data-md-color-media = "(prefers-color-scheme: light)" data-md-color-scheme = "default" data-md-color-primary = "custom" data-md-color-accent = "custom" aria-label = "Switch to dark mode" type = "radio" name = "__palette" id = "__palette_1" >
< label class = "md-header__button md-icon" title = "Switch to dark mode" for = "__palette_2" hidden >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" >< path d = "M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0-7 2.39 3.42C13.65 5.15 12.84 5 12 5s-1.65.15-2.39.42zM3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29zm.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14zM20.65 7l-1.77 3.79a7.02 7.02 0 0 0-2.38-4.15zm-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29zM12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44z" /></ svg >
</ label >
< input class = "md-option" data-md-color-media = "(prefers-color-scheme: dark)" data-md-color-scheme = "slate" data-md-color-primary = "black" data-md-color-accent = "custom" aria-label = "Switch to system preference" type = "radio" name = "__palette" id = "__palette_2" >
< label class = "md-header__button md-icon" title = "Switch to system preference" for = "__palette_0" hidden >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" >< path d = "m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3zm3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95zm-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31" /></ svg >
</ label >
</ form >
< script > var palette = __md_get ( "__palette" ); if ( palette && palette . color ){ if ( "(prefers-color-scheme)" === palette . color . media ){ var media = matchMedia ( "(prefers-color-scheme: light)" ), input = document . querySelector ( media . matches ? "[data-md-color-media='(prefers-color-scheme: light)']" : "[data-md-color-media='(prefers-color-scheme: dark)']" ); palette . color . media = input . getAttribute ( "data-md-color-media" ), palette . color . scheme = input . getAttribute ( "data-md-color-scheme" ), palette . color . primary = input . getAttribute ( "data-md-color-primary" ), palette . color . accent = input . getAttribute ( "data-md-color-accent" )} for ( var [ key , value ] of Object . entries ( palette . color )) document . body . setAttribute ( "data-md-color-" + key , value )}</ script >
< label class = "md-header__button md-icon" for = "__search" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" >< path d = "M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5" /></ svg >
</ label >
< div class = "md-search" data-md-component = "search" role = "dialog" >
< label class = "md-search__overlay" for = "__search" ></ label >
< div class = "md-search__inner" role = "search" >
< form class = "md-search__form" name = "search" >
< input type = "text" class = "md-search__input" name = "query" aria-label = "Search" placeholder = "Search" autocapitalize = "off" autocorrect = "off" autocomplete = "off" spellcheck = "false" data-md-component = "search-query" required >
< label class = "md-search__icon md-icon" for = "__search" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" >< path d = "M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5" /></ svg >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" >< path d = "M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z" /></ svg >
</ label >
< nav class = "md-search__options" aria-label = "Search" >
< a href = "javascript:void(0)" class = "md-search__icon md-icon" title = "Share" aria-label = "Share" data-clipboard data-clipboard-text = "" data-md-component = "search-share" tabindex = "-1" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" >< path d = "M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08" /></ svg >
</ a >
< button type = "reset" class = "md-search__icon md-icon" title = "Clear" aria-label = "Clear" tabindex = "-1" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" >< path d = "M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" /></ svg >
</ button >
</ nav >
< div class = "md-search__suggest" data-md-component = "search-suggest" ></ div >
</ form >
< div class = "md-search__output" >
< div class = "md-search__scrollwrap" tabindex = "0" data-md-scrollfix >
< div class = "md-search-result" data-md-component = "search-result" >
< div class = "md-search-result__meta" >
Initializing search
</ div >
< ol class = "md-search-result__list" role = "presentation" ></ ol >
</ div >
</ div >
</ div >
</ div >
</ div >
< div class = "md-header__source" >
< a href = "https://github.com/mpusz/mp-units" title = "Go to repository" class = "md-source" data-md-component = "source" >
< div class = "md-source__icon md-icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 448 512" > <!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--> < path d = "M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81" /></ svg >
</ div >
< div class = "md-source__repository" >
mpusz/mp-units
</ div >
</ a >
</ div >
</ nav >
</ header >
< div class = "md-container" data-md-component = "container" >
< nav class = "md-tabs" aria-label = "Tabs" data-md-component = "tabs" >
< div class = "md-grid" >
< ul class = "md-tabs__list" >
< li class = "md-tabs__item" >
< a href = ".." class = "md-tabs__link" >
Home
</ a >
</ li >
< li class = "md-tabs__item" >
< a href = "../getting_started/introduction/" class = "md-tabs__link" >
Getting Started
</ a >
</ li >
< li class = "md-tabs__item" >
< a href = "../users_guide/terms_and_definitions/" class = "md-tabs__link" >
User's Guide
</ a >
</ li >
< li class = "md-tabs__item" >
< a href = "../api_reference/" class = "md-tabs__link" >
API Reference
</ a >
</ li >
< li class = "md-tabs__item" >
< a href = "../blog/" class = "md-tabs__link" >
Blog
</ a >
</ li >
< li class = "md-tabs__item md-tabs__item--active" >
< a href = "./" class = "md-tabs__link" >
Release Notes
</ a >
</ li >
</ ul >
</ div >
</ nav >
< main class = "md-main" data-md-component = "main" >
< div class = "md-main__inner md-grid" >
< div class = "md-sidebar md-sidebar--primary" data-md-component = "sidebar" data-md-type = "navigation" >
< div class = "md-sidebar__scrollwrap" >
< div class = "md-sidebar__inner" >
< nav class = "md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label = "Navigation" data-md-level = "0" >
< label class = "md-nav__title" for = "__drawer" >
< a href = ".." title = "mp-units" class = "md-nav__button md-logo" aria-label = "mp-units" data-md-component = "logo" >
< img src = "../assets/images/mp-units-transparent-white.svg" alt = "logo" >
</ a >
mp-units
</ label >
< div class = "md-nav__source" >
< a href = "https://github.com/mpusz/mp-units" title = "Go to repository" class = "md-source" data-md-component = "source" >
< div class = "md-source__icon md-icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 448 512" > <!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--> < path d = "M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81" /></ svg >
</ div >
< div class = "md-source__repository" >
mpusz/mp-units
</ div >
</ a >
</ div >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = ".." class = "md-nav__link" >
< span class = "md-ellipsis" >
Home
</ span >
</ a >
</ li >
< li class = "md-nav__item md-nav__item--nested" >
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_2" >
< label class = "md-nav__link" for = "__nav_2" id = "__nav_2_label" tabindex = "0" >
< span class = "md-ellipsis" >
Getting Started
</ span >
< span class = "md-nav__icon md-icon" ></ span >
</ label >
< nav class = "md-nav" data-md-level = "1" aria-labelledby = "__nav_2_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_2" >
< span class = "md-nav__icon md-icon" ></ span >
Getting Started
</ label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "../getting_started/introduction/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Introduction
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../getting_started/quick_start/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Quick Start
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../getting_started/look_and_feel/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Look and Feel
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../getting_started/project_structure/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Project Structure
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../getting_started/cpp_compiler_support/" class = "md-nav__link" >
< span class = "md-ellipsis" >
C++ compiler support (API/ABI)
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../getting_started/installation_and_usage/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Installation and Usage
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../getting_started/contributing/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Contributing
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../getting_started/faq/" class = "md-nav__link" >
< span class = "md-ellipsis" >
FAQ
</ span >
</ a >
</ li >
</ ul >
</ nav >
</ li >
< li class = "md-nav__item md-nav__item--nested" >
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_3" >
< label class = "md-nav__link" for = "__nav_3" id = "__nav_3_label" tabindex = "0" >
< span class = "md-ellipsis" >
User's Guide
</ span >
< span class = "md-nav__icon md-icon" ></ span >
</ label >
< nav class = "md-nav" data-md-level = "1" aria-labelledby = "__nav_3_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_3" >
< span class = "md-nav__icon md-icon" ></ span >
User's Guide
</ label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "../users_guide/terms_and_definitions/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Terms and Definitions
</ span >
</ a >
</ li >
< li class = "md-nav__item md-nav__item--nested" >
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_3_2" >
< label class = "md-nav__link" for = "__nav_3_2" id = "__nav_3_2_label" tabindex = "0" >
< span class = "md-ellipsis" >
Framework Basics
</ span >
< span class = "md-nav__icon md-icon" ></ span >
</ label >
< nav class = "md-nav" data-md-level = "2" aria-labelledby = "__nav_3_2_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_3_2" >
< span class = "md-nav__icon md-icon" ></ span >
Framework Basics
</ label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "../users_guide/framework_basics/interface_introduction/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Interface Introduction
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/framework_basics/design_overview/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Design Overview
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/framework_basics/systems_of_quantities/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Systems of Quantities
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/framework_basics/systems_of_units/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Systems of Units
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/framework_basics/simple_and_typed_quantities/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Simple and Typed Quantities
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/framework_basics/value_conversions/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Value Conversions
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/framework_basics/character_of_a_quantity/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Character of a Quantity
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/framework_basics/dimensionless_quantities/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Dimensionless Quantities
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/framework_basics/quantity_arithmetics/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Quantity Arithmetics
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/framework_basics/generic_interfaces/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Generic Interfaces
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/framework_basics/faster_than_lightspeed_constants/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Faster-than-lightspeed Constants
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/framework_basics/the_affine_space/" class = "md-nav__link" >
< span class = "md-ellipsis" >
The Affine Space
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/framework_basics/obtaining_metadata/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Obtaining Metadata
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/framework_basics/concepts/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Concepts
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/framework_basics/text_output/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Text Output
</ span >
</ a >
</ li >
</ ul >
</ nav >
</ li >
< li class = "md-nav__item md-nav__item--nested" >
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_3_3" >
< label class = "md-nav__link" for = "__nav_3_3" id = "__nav_3_3_label" tabindex = "0" >
< span class = "md-ellipsis" >
Systems
</ span >
< span class = "md-nav__icon md-icon" ></ span >
</ label >
< nav class = "md-nav" data-md-level = "2" aria-labelledby = "__nav_3_3_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_3_3" >
< span class = "md-nav__icon md-icon" ></ span >
Systems
</ label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "../users_guide/systems/introduction/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Introduction
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/systems/isq/" class = "md-nav__link" >
< span class = "md-ellipsis" >
International System of Quantities (ISQ)
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/systems/si/" class = "md-nav__link" >
< span class = "md-ellipsis" >
International System of Units (SI)
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/systems/strong_angular_system/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Strong Angular System
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/systems/natural_units/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Natural Units
</ span >
</ a >
</ li >
</ ul >
</ nav >
</ li >
< li class = "md-nav__item md-nav__item--nested" >
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_3_4" >
< label class = "md-nav__link" for = "__nav_3_4" id = "__nav_3_4_label" tabindex = "0" >
< span class = "md-ellipsis" >
Use Cases
</ span >
< span class = "md-nav__icon md-icon" ></ span >
</ label >
< nav class = "md-nav" data-md-level = "2" aria-labelledby = "__nav_3_4_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_3_4" >
< span class = "md-nav__icon md-icon" ></ span >
Use Cases
</ label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "../users_guide/use_cases/pure_dimensional_analysis/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Pure Dimensional Analysis
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/use_cases/working_with_legacy_interfaces/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Working with Legacy Interfaces
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/use_cases/using_custom_representation_types/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Using Custom Representation Types
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/use_cases/interoperability_with_other_libraries/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Interoperability with Other Libraries
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/use_cases/extending_the_library/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Extending the Library
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/use_cases/wide_compatibility/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Wide Compatibility
</ span >
</ a >
</ li >
</ ul >
</ nav >
</ li >
< li class = "md-nav__item md-nav__item--nested" >
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_3_5" >
< label class = "md-nav__link" for = "__nav_3_5" id = "__nav_3_5_label" tabindex = "0" >
< span class = "md-ellipsis" >
Examples
</ span >
< span class = "md-nav__icon md-icon" ></ span >
</ label >
< nav class = "md-nav" data-md-level = "2" aria-labelledby = "__nav_3_5_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_3_5" >
< span class = "md-nav__icon md-icon" ></ span >
Examples
</ label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "../users_guide/examples/tags_index/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Tags Index
</ span >
</ a >
</ li >
< li class = "md-nav__item md-nav__item--nested" >
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_3_5_2" >
< label class = "md-nav__link" for = "__nav_3_5_2" id = "__nav_3_5_2_label" tabindex = "0" >
< span class = "md-ellipsis" >
All Examples
</ span >
< span class = "md-nav__icon md-icon" ></ span >
</ label >
< nav class = "md-nav" data-md-level = "3" aria-labelledby = "__nav_3_5_2_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_3_5_2" >
< span class = "md-nav__icon md-icon" ></ span >
All Examples
</ label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "../users_guide/examples/hello_units/" class = "md-nav__link" >
< span class = "md-ellipsis" >
hello_units
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/examples/avg_speed/" class = "md-nav__link" >
< span class = "md-ellipsis" >
avg_speed
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/examples/si_constants/" class = "md-nav__link" >
< span class = "md-ellipsis" >
si_constants
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../users_guide/examples/hw_voltage/" class = "md-nav__link" >
< span class = "md-ellipsis" >
hw_voltage
</ span >
</ a >
</ li >
</ ul >
</ nav >
</ li >
</ ul >
</ nav >
</ li >
< li class = "md-nav__item md-nav__item--nested" >
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_3_6" >
< label class = "md-nav__link" for = "__nav_3_6" id = "__nav_3_6_label" tabindex = "0" >
< span class = "md-ellipsis" >
Appendix
</ span >
< span class = "md-nav__icon md-icon" ></ span >
</ label >
< nav class = "md-nav" data-md-level = "2" aria-labelledby = "__nav_3_6_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_3_6" >
< span class = "md-nav__icon md-icon" ></ span >
Appendix
</ label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "../appendix/glossary/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Glossary
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../appendix/references/" class = "md-nav__link" >
< span class = "md-ellipsis" >
References
</ span >
</ a >
</ li >
</ ul >
</ nav >
</ li >
</ ul >
</ nav >
</ li >
< li class = "md-nav__item" >
< a href = "../api_reference/" class = "md-nav__link" >
< span class = "md-ellipsis" >
API Reference
</ span >
</ a >
</ li >
< li class = "md-nav__item md-nav__item--nested" >
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_5" >
< div class = "md-nav__link md-nav__container" >
< a href = "../blog/" class = "md-nav__link " >
< span class = "md-ellipsis" >
Blog
</ span >
</ a >
< label class = "md-nav__link " for = "__nav_5" id = "__nav_5_label" tabindex = "0" >
< span class = "md-nav__icon md-icon" ></ span >
</ label >
</ div >
< nav class = "md-nav" data-md-level = "1" aria-labelledby = "__nav_5_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_5" >
< span class = "md-nav__icon md-icon" ></ span >
Blog
</ label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item md-nav__item--nested" >
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_5_2" >
< label class = "md-nav__link" for = "__nav_5_2" id = "__nav_5_2_label" tabindex = "0" >
< span class = "md-ellipsis" >
Archive
</ span >
< span class = "md-nav__icon md-icon" ></ span >
</ label >
< nav class = "md-nav" data-md-level = "2" aria-labelledby = "__nav_5_2_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_5_2" >
< span class = "md-nav__icon md-icon" ></ span >
Archive
</ label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "../blog/archive/2024/" class = "md-nav__link" >
< span class = "md-ellipsis" >
2024
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../blog/archive/2023/" class = "md-nav__link" >
< span class = "md-ellipsis" >
2023
</ span >
</ a >
</ li >
</ ul >
</ nav >
</ li >
< li class = "md-nav__item md-nav__item--nested" >
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_5_3" >
< label class = "md-nav__link" for = "__nav_5_3" id = "__nav_5_3_label" tabindex = "0" >
< span class = "md-ellipsis" >
Categories
</ span >
< span class = "md-nav__icon md-icon" ></ span >
</ label >
< nav class = "md-nav" data-md-level = "2" aria-labelledby = "__nav_5_3_label" aria-expanded = "false" >
< label class = "md-nav__title" for = "__nav_5_3" >
< span class = "md-nav__icon md-icon" ></ span >
Categories
</ label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "../blog/category/metrology/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Metrology
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../blog/category/releases/" class = "md-nav__link" >
< span class = "md-ellipsis" >
Releases
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "../blog/category/wg21-updates/" class = "md-nav__link" >
< span class = "md-ellipsis" >
WG21 Updates
</ span >
</ a >
</ li >
</ ul >
</ nav >
</ li >
</ ul >
</ nav >
</ li >
< li class = "md-nav__item md-nav__item--active" >
< input class = "md-nav__toggle md-toggle" type = "checkbox" id = "__toc" >
< label class = "md-nav__link md-nav__link--active" for = "__toc" >
< span class = "md-ellipsis" >
Release Notes
</ span >
< span class = "md-nav__icon md-icon" ></ span >
</ label >
< a href = "./" class = "md-nav__link md-nav__link--active" >
< span class = "md-ellipsis" >
Release Notes
</ span >
</ a >
< nav class = "md-nav md-nav--secondary" aria-label = "Table of contents" >
< label class = "md-nav__title" for = "__toc" >
< span class = "md-nav__icon md-icon" ></ span >
Table of contents
</ label >
< ul class = "md-nav__list" data-md-component = "toc" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "#mp-units" class = "md-nav__link" >
< span class = "md-ellipsis" >
mp-units
</ span >
</ a >
< nav class = "md-nav" aria-label = "mp-units" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#2.4.0" class = "md-nav__link" >
< span class = "md-ellipsis" >
2.4.0 November 5, 2024
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "#2.3.0" class = "md-nav__link" >
< span class = "md-ellipsis" >
2.3.0 September 27, 2024
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "#2.2.1" class = "md-nav__link" >
< span class = "md-ellipsis" >
2.2.1 July 3, 2024
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "#2.2.0" class = "md-nav__link" >
< span class = "md-ellipsis" >
2.2.0 June 14, 2024
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "#2.1.1" class = "md-nav__link" >
< span class = "md-ellipsis" >
2.1.1 May 16, 2024
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "#2.1.0" class = "md-nav__link" >
< span class = "md-ellipsis" >
2.1.0 December 9, 2023
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "#2.0.0" class = "md-nav__link" >
< span class = "md-ellipsis" >
2.0.0 September 24, 2023
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "#0.8.0" class = "md-nav__link" >
< span class = "md-ellipsis" >
0.8.0 June 14, 2023
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "#0.7.0" class = "md-nav__link" >
< span class = "md-ellipsis" >
0.7.0 May 11, 2021
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "#0.6.0" class = "md-nav__link" >
< span class = "md-ellipsis" >
0.6.0 September 13, 2020
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "#0.5.0" class = "md-nav__link" >
< span class = "md-ellipsis" >
0.5.0 May 17, 2020
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "#0.4.0" class = "md-nav__link" >
< span class = "md-ellipsis" >
0.4.0 Nov 17, 2019
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "#0.3.1" class = "md-nav__link" >
< span class = "md-ellipsis" >
0.3.1 Sep 18, 2019
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "#0.3.0" class = "md-nav__link" >
< span class = "md-ellipsis" >
0.3.0 Sep 16, 2019
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "#0.2.0" class = "md-nav__link" >
< span class = "md-ellipsis" >
0.2.0 July 18, 2019
</ span >
</ a >
</ li >
< li class = "md-nav__item" >
< a href = "#0.1.0" class = "md-nav__link" >
< span class = "md-ellipsis" >
0.1.0 May 18, 2019
</ span >
</ a >
</ li >
</ ul >
</ nav >
</ li >
</ ul >
</ nav >
</ li >
</ ul >
</ nav >
</ div >
</ div >
</ div >
< div class = "md-content" data-md-component = "content" >
< article class = "md-content__inner md-typeset" >
< a href = "https://github.com/mpusz/mp-units/edit/master/docs/release_notes.md" title = "Edit this page" class = "md-content__button md-icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" >< path d = "M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z" /></ svg >
</ a >
< a href = "https://github.com/mpusz/mp-units/raw/master/docs/release_notes.md" title = "View source of this page" class = "md-content__button md-icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" >< path d = "M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2" /></ svg >
</ a >
< h1 id = "release-notes" > Release Notes< a class = "headerlink" href = "#release-notes" title = "Permanent link" > ¶ </ a ></ h1 >
< h2 id = "mp-units" > mp-units< a class = "headerlink" href = "#mp-units" title = "Permanent link" > ¶ </ a ></ h2 >
< h3 id = "2.4.0" > 2.4.0 < small > November 5, 2024</ small >< a class = "headerlink" href = "#2.4.0" title = "Permanent link" > ¶ </ a ></ h3 >
< ul >
< li > (!) feat: < code > phase_velocity</ code > and < code > group_velocity</ code > aliases removed from ISQ by ISO</ li >
< li > feat: < code > iec::bit</ code > using-declared in < code > iec::unit_symbols</ code ></ li >
< li > feat: common unit symbols now use < code > EQUIV{u1, u2, ...}</ code > syntax</ li >
< li > feat: < code > scaled_unit</ code > symbol printing improved (< code > []</ code > around the entire unit, small magnitude values do not use a power of < code > 10</ code > anymore)</ li >
< li > feat: < code > scaled_unit</ code > does not have a priority over < code > derived_unit</ code > anymore</ li >
< li > feat: fractional exponents support added to < code > mag_power</ code ></ li >
< li > feat: tag types are now required to be empty</ li >
< li > feat: magnitude text now obeys formatting parameters and knows how to print constants</ li >
< li > feat: added support for printing powers of magnitude constants</ li >
< li > feat: < code > SymbolicConstant</ code > concept added</ li >
< li > feat: < code > common_unit</ code > selection algorithm improved to make < code > rev + rad</ code > return < code > rad</ code ></ li >
< li > feat: litre text symbol changed from < code > l</ code > to < code > L</ code > to avoid ambiguity with < code > 1</ code ></ li >
< li > feat: alternative litre unit symbol < code > L</ code > added to prevent ambiguities with < code > 1</ code ></ li >
< li > feat: Unicode unit symbols</ li >
< li > feat: < code > π</ code > added as an alias for < code > pi</ code ></ li >
< li > feat: < code > expr_pow</ code > extended to remove redundancy in callers</ li >
< li > feat: < code > DerivedDimensionExpr</ code > , < code > DerivedQuantitySpecExpr</ code > and < code > DerivedUnitExpr</ code > removed</ li >
< li > feat: < code > MagnitudeSpecExpr</ code > and < code > PowerVBase</ code > removed and some functions renamed to limit possible ambiguity in overload resolution</ li >
< li > feat: < code > std::is_object</ code > constraint applied to < code > value_type_t</ code ></ li >
< li > feat: < code > quantity_values</ code > are now defined on top of < code > std::chrono::duration_values</ code ></ li >
< li > feat: from now on truncation is not allowed in compound assignment</ li >
< li > feat(example): currency example now uses < code > chrono::time_point</ code > and has better interfaces</ li >
< li > feat(example): < code > treat_as_floating_point</ code > specializations for examples' types removed</ li >
< li > (!) refactor: all < code > iec</ code > quantity specifications are now deprecated and moved to < code > isq</ code ></ li >
< li > (!) refactor: < code > mag_constant</ code > now takes a symbol and a value and the class deriving from it must be final</ li >
< li > (!) refactor: < code > op==(U1, U2)</ code > now checks for the same type (old behavior available as < code > equivalent(U1, U2)</ code > ) + < code > convertible</ code > now verifies associated < code > quantity_spec</ code > as well</ li >
< li > (!) refactor: < code > ascii</ code > -> < code > portable</ code > , < code > unicode</ code > -> < code > utf8</ code > , 'A' -> 'P'</ li >
< li > (!) refactor: < code > char_traits</ code > removed from < code > fixed_string</ code ></ li >
< li > (!) refactor: convertibility traits and concepts refactored to use < code > bool</ code > flags instead of wrappers</ li >
< li > (!) refactor: tag types should not expose their members</ li >
< li > refactor: < code > convertible(U1, U2)</ code > implementation simplified</ li >
< li > refactor: < code > abs</ code > moved to < code > constexpr_math.h</ code ></ li >
< li > refactor: < code > unit_symbol_impl</ code > simplified</ li >
< li > refactor: < code > unit_symbol_formatting</ code > moved to a dedicated header file</ li >
< li > refactor: < code > shorten_T</ code > removed</ li >
< li > refactor: magnitude interface cleanup</ li >
< li > refactor: < code > derived_from_the_same_base_dimension</ code > no longer needed</ li >
< li > refactor: < code > one_of</ code > usage removed from the < code > fixed_string</ code > deduction guides</ li >
< li > refactor: < code > quantity.h</ code > is not needed in < code > constants.h</ code > (< code > unit.h</ code > is enough)</ li >
< li > refactor: < code > SameDimension</ code > concept is not needed and can be inlined in < code > DimensionOf</ code ></ li >
< li > refactor: framework Unicode symbols are now spelled using their codes</ li >
< li > refactor: < code > QuantitySpecWithNoSpecifiers</ code > removed and < code > kind_of</ code > definition simplified</ li >
< li > refactor: < code > treat_as_floating_point</ code > simplified and extended to use < code > std::chrono::treat_as_floating_point_v</ code ></ li >
< li > refactor: < code > wrapped_type_t</ code > reuses < code > std::indirectly_readable_traits</ code ></ li >
< li > refactor: < code > expr_fractions</ code > takes direct < code > OneType</ code > type now instead of a trait</ li >
< li > refactor: Unicode symbols description reworked based on the latest SG16 recommendations</ li >
< li > refactor: < code > Mutable</ code > concept applied to < code > quantity</ code > and < code > quantity_point</ code ></ li >
< li > refactor: < code > explicit</ code > cleanup for deduction guides of < code > quantity</ code > and < code > quantity_point</ code ></ li >
< li > refactor: < code > point_origin_interface::op-</ code > cleanup</ li >
< li > refactor: < code > QuantityLikeImpl</ code > refactored to conform to API Reference by @JohelEGP</ li >
< li > refactor: < code > get_complexity</ code > refactored to be 0-based and not account for a number of arguments in a list</ li >
< li > refactor: < code > get_complexity</ code > refactored to returned maximum complexity of an element (instead of the sum of elements)</ li >
< li > refactor(test): < code > derived_quantity</ code > refactored to < code > child_quantity</ code ></ li >
< li > fix: missing < code > are_ingredients_convertible</ code > overloads added</ li >
< li > fix: constraints for magnitude added for < code > scaled_unit</ code > and fixed < code > common_unit</ code > instantiating it incorrectly</ li >
< li > fix: according to ISO 80000-16 < code > %</ code > should always be prefixed with space</ li >
< li > fix: extraneous space in unit symbol having only denominators removed</ li >
< li > fix: explicit cast added to < code > less</ code > for magnitudes to fix clang-arm64 conversion error</ li >
< li > fix: < code > common_unit</ code > handling fixed for some corner cases</ li >
< li > fix: math functions constraints fixed</ li >
< li > fix: < code > operator*(M, U u)</ code > fixed for < code > U</ code > being < code > scaled_unit</ code ></ li >
< li > fix: subsumption of < code > QuantityKindSpec</ code > fixed</ li >
< li > fix: < code > ValuePreservingTo</ code > fixed to apply < code > std::remove_cvref_t</ code > on < code > FromRep</ code ></ li >
< li > fix: compound assignment operations on quantities now behave the same as on the underlying representation types</ li >
< li > fix: < code > QuantityConvertibleTo</ code > used in < code > quantity_point</ code > compound assignment</ li >
< li > fix: < code > convertible_kinds</ code > implementation fixed</ li >
< li > fix(tests): freestanding build fixed</ li >
< li > test: unit tests for the inverse of < code > mag_constant</ code > added</ li >
< li > test: Unicode symbols used in unit tests</ li >
< li > test: more < code > std::chrono</ code > tests added</ li >
< li > test: commutativity tests added to ISQ</ li >
< li > test: one < code > kind_of</ code > test added to reference tests</ li >
< li > test: < code > pow< 0> </ code > and < code > pow< 1> </ code > tests added for dimensions</ li >
< li > test: more < code > get_common_quantity_spec</ code > tests added</ li >
< li > build: setting of some test_package CMake options enabled only for a < code > cxx_modules</ code > build</ li >
< li > ci: < code > sudo apt update</ code > added for documentation.yml in hope that it will resolve missing system packages issue</ li >
< li > ci: MSVC added to the CI</ li >
< li > ci: the latest not-released docs will use "HEAD" as a version from now on</ li >
2024-11-05 17:59:51 +00:00
< li > ci: documentation action should run on a new tag as well</ li >
< li > ci: documentation action limited only to commits that change documentation files</ li >
< li > ci: non-documentation actions should not run on tags</ li >
2024-11-05 18:52:17 +01:00
< li > docs: missing systems added to the "Project Structure" chapter</ li >
< li > docs: graphs of ISQ kind hierarchies improved</ li >
< li > docs: category of the ISO meeting reports changed to "WG21 Updates"</ li >
< li > docs: blog comments support added</ li >
< li > docs: Part 1-5 articles of the ISQ series added</ li >
< li > docs: "Symbols of scaled units" chapter added + minor updates to scaled and common units chapters</ li >
< li > docs: conan profile updated to present gcc-14 instead of gcc-12 which is no longer supported</ li >
< li > docs: "Why derived units order is not preserved from the multiplication?" chapter added to FAQ</ li >
< li > docs: "Many shades of the same unit" extended with a note about the derived units order</ li >
< li > docs: API Reference now presents < em > index.html</ em > instead of < em > full.hml</ em ></ li >
</ ul >
< h3 id = "2.3.0" > 2.3.0 < small > September 27, 2024</ small >< a class = "headerlink" href = "#2.3.0" title = "Permanent link" > ¶ </ a ></ h3 >
< ul >
< li > (!) feat: < code > delta</ code > and < code > absolute</ code > construction helpers</ li >
< li > (!) feat: Conan and CMake options changed as requested at ConanCenter code review</ li >
< li > (!) feat: < code > unit_can_be_prefixed</ code > removed - from now on all named units can be prefixed</ li >
< li > feat: formatting functions for units and dimensions marked as < code > constexpr</ code > to enable compile-time text formatting</ li >
< li > feat: < code > qp1.quantity_from(qp2)</ code > added</ li >
< li > feat: non-member < code > swap</ code > added for < code > fixed_string</ code ></ li >
< li > feat: simplified < code > inplace_vector</ code > added</ li >
< li > feat: text output for angular units improved (space before symbol removed)</ li >
< li > feat: representation type template parameter added to value conversion functions</ li >
< li > feat: all tags in the expression templates are now ordered by the type names</ li >
< li > feat: convertibility of a quantity with a unit < code > one</ code > with the raw value added</ li >
< li > feat: < code > import std;</ code > support added</ li >
< li > feat: compute values for rational magnitude powers (thanks < a href = "https://github.com/chiphogg" > @chiphogg</ a > )</ li >
< li > feat: < code > value_cast< Representation, Unit> ()</ code > complementary conversion function added</ li >
< li > feat: < code > hw_voltage</ code > example added</ li >
< li > feat: < code > MP_UNITS_IMPORT_STD</ code > and < code > MP_UNITS_MODULES</ code > handled properly in < code > test_package.cpp</ code ></ li >
< li > feat: < code > complex</ code > quantity character added</ li >
< li > feat: < code > iec::var</ code > unit added</ li >
< li > feat: < code > type_list_unique</ code > added</ li >
< li > feat: < code > for_each</ code > on < code > std::tuple</ code > added</ li >
< li > feat: < code > common_unit</ code > support added</ li >
< li > (!) refactor: < code > quantity_point_like_traits</ code > now use numerical value instead of the quantity</ li >
< li > (!) refactor: < code > iec80000</ code > system renamed to < code > iec</ code ></ li >
< li > (!) refactor: < code > mag_pi</ code > is now < code > mag< pi> </ code ></ li >
< li > (!) refactor: < code > common_XXX()</ code > functions renamed to < code > get_common_XXX()</ code ></ li >
< li > refactor: error messages-related improvements</ li >
< li > refactor: < code > [[nodiscard]]</ code > and < code > consteval</ code > set for some magnitude-related functions</ li >
< li > refactor: degree Celsius and Fahrenheit symbols text now use Unicode codepoints</ li >
< li > refactor: < code > dimension_symbol</ code > and < code > units_symbol</ code > refactored to use < code > inplace_vector</ code ></ li >
< li > refactor: < code > unit_symbol</ code > and < code > dimension_symbol</ code > refactored for readability and < code > consteval</ code ></ li >
< li > refactor: binary operators of < code > quantity</ code > and < code > quantity_point</ code > are now hidden friends</ li >
< li > refactor: tag types-related operators are now hidden friends as well</ li >
< li > refactor: < code > ValuePreservingTo</ code > concept added</ li >
< li > refactor: perfect forwarding interfaces improved</ li >
< li > refactor: < code > Representation</ code > concepts now requires < code > WeaklyRegular</ code > instead of < code > std::regular</ code ></ li >
< li > refactor: < code > quantity_point</ code > default-constructibility removed from the < code > quantity_from</ code > constraints</ li >
< li > refactor: < code > has_common_type_v</ code > simplified</ li >
< li > refactor: < code > is_power_of_quantity_spec</ code > and < code > is_power_of_dim</ code > variable templates converted to concepts</ li >
< li > refactor: unnecessary custom versions of < code > is_specialization_of</ code > removed</ li >
< li > refactor: < code > is_derived_from_specialization_of_v</ code > added and applied to remove custom traits</ li >
< li > fix: signatures of capacity functions of < code > fixed_string</ code > fixed</ li >
< li > fix: < code > MP_UNITS_API_NO_CRTP</ code > handling fixed</ li >
< li > fix: < code > MP_UNITS_HOSTED</ code > branch added to < code > core.h</ code ></ li >
< li > fix: mkdocs dependencies fixed in the gitpod dockerfile</ li >
< li > fix: < code > MP_UNITS_API_CONTRACTS</ code > should have a priority over headers availability</ li >
< li > fix: < code > si.h</ code > and < code > angular.h</ code > now properly include < code > hacks.h</ code > to define < code > MP_UNITS_HOSTED</ code > before its usage</ li >
< li > fix: quantity scaling between different prefixes improved</ li >
< li > fix: conversion operator to < code > std::chrono</ code > types fixed</ li >
< li > fix: < code > std::format</ code > does not always use < code > Char*</ code > as iterators</ li >
< li > fix: < code > complex_power</ code > & co fixed</ li >
< li > fix: < code > __cpp_deleted_function</ code > workaround for clang-19 added</ li >
< li > test: conversion to chrono unit tests added</ li >
< li > test: unit tests for creating a quantity from a < code > volatile</ code > variable</ li >
< li > test: increase tolerance for certain math tests to two epsilon by < a href = "https://github.com/burnpanck" > @burnpanck</ a ></ li >
< li > test: < code > std::complex</ code > -based quantities tests added</ li >
< li > build: conanfile bumped to use < code > catch2/3.7.0</ code ></ li >
< li > build: conanfile bumped to use < code > fmt/11.0.1</ code ></ li >
< li > build: minimum required CMake version bumped to 3.25</ li >
< li > build: duplicated < code > cmake_minimum_required</ code > commands removed</ li >
< li > build: minimum conan version set to 2.0.15</ li >
< li > build: MSVC compilation enabled for the library part by < a href = "https://github.com/czjhoppe" > @czjhoppe</ a ></ li >
< li > build: Dockerfile updated for gitpod</ li >
< li > build: < code > generate()</ code > in < code > test_package</ code > now correctly propagates project's options</ li >
< li > build: < code > target_include_directories</ code > is not needed anymore</ li >
< li > build: < code > target_compile_features</ code > now uses < code > CMAKE_CXX_STANDARD</ code ></ li >
< li > build: < code > package_type</ code > is dynamically set in conanfile.py depending if we build modules or not</ li >
< li > build(conan): packaging improved</ li >
< li > ci: added test for upstream clang on macos-14, as an example for an arm64 platform by < a href = "https://github.com/burnpanck" > @burnpanck</ a ></ li >
< li > style: pre-commit updated to clang-format-18.1.8</ li >
< li > docs: "Strong Angular System" chapter added</ li >
< li > docs: docs updated to use new spelling for Conan options</ li >
< li > docs: "Interface Introduction" chapter updated</ li >
< li > docs: St. Louis 2024 report added</ li >
< li > docs: "Radians and degrees support" added</ li >
< li > docs: Rework of "Getting Started" section</ li >
< li > docs: "API Reference" support added (thanks < a href = "https://github.com/JohelEGP" > @JohelEGP</ a > )</ li >
< li > docs: "Generating API reference" chapter added</ li >
< li > docs: minor formatting and spelling improvements to the "CONTRIBUTING.md"</ li >
< li > docs: "Unit symbols" chapter added</ li >
< li > docs: examples line numbers fixed</ li >
< li > docs: "Text Formatting" tag removed from avg_speed example</ li >
< li > docs: line breaks in mermaid graphs fixed</ li >
< li > docs: 2.3.0 release added</ li >
</ ul >
< h3 id = "2.2.1" > 2.2.1 < small > July 3, 2024</ small >< a class = "headerlink" href = "#2.2.1" title = "Permanent link" > ¶ </ a ></ h3 >
< ul >
< li > (!) feat: Conan and CMake options refactored</ li >
</ ul >
< h3 id = "2.2.0" > 2.2.0 < small > June 14, 2024</ small >< a class = "headerlink" href = "#2.2.0" title = "Permanent link" > ¶ </ a ></ h3 >
< ul >
< li > (!) feat: C++ modules support added by < a href = "https://github.com/JohelEGP" > @JohelEGP</ a ></ li >
< li > (!) feat: New formatting specification implemented</ li >
< li > (!) feat: < code > has_unit_symbol</ code > support removed</ li >
< li > (!) feat: ABI concerns resolved with introduction of u8 strings for symbols</ li >
< li > (!) feat: API-related Conan, CMake, and preprocessor options redesigned</ li >
< li > (!) feat: < code > core.h</ code > removed</ li >
< li > (!) feat: from now on units, dimensions, quantity specifications, and point origins have to be marked as < code > final</ code ></ li >
< li > feat: implicit point origins support added</ li >
< li > feat: unit default point origin support added</ li >
< li > feat: < code > fma</ code > , < code > isfinite</ code > , < code > isinf</ code > , and < code > isnan</ code > math function added by < a href = "https://github.com/NAThompson" > @NAThompson</ a ></ li >
< li > feat: < code > fma</ code > for quantity points added</ li >
< li > feat: < code > quantity_point</ code > support added for < code > quantity_cast</ code > and < code > value_cast</ code ></ li >
< li > feat: < code > value_cast< Unit, Representation> </ code > added</ li >
< li > feat: < code > value_cast< Quantity> (q)</ code > , < code > value_cast< Quantity> (qp)</ code > and < code > value_cast< QuantityPoint> (qp)</ code > added by < a href = "https://github.com/burnpanck" > @burnpanck</ a ></ li >
< li > feat: < code > interconvertible(QuantitySpec, QuantitySpec)</ code > added</ li >
< li > feat: < code > qp.quantity_from_zero()</ code > added</ li >
< li > feat: < code > value_type</ code > type trait added</ li >
< li > feat: do not print space between a number and < code > percent</ code > or < code > per_mille</ code ></ li >
< li > feat: < code > ppm</ code > parts per million added by < a href = "https://github.com/nebkat" > @nebkat</ a ></ li >
< li > feat: < code > atan2</ code > 2-argument arctangent added by < a href = "https://github.com/nebkat" > @nebkat</ a ></ li >
< li > feat: < code > fmod</ code > floating-point division remainder added by < a href = "https://github.com/nebkat" > @nebkat</ a ></ li >
< li > feat: < code > remainder</ code > IEEE division remainder added by < a href = "https://github.com/nebkat" > @nebkat</ a ></ li >
< li > feat: < code > std::format</ code > support added</ li >
< li > feat: unit text output support added</ li >
< li > feat: formatting error messages improved</ li >
< li > feat: improve types readability by eliminating extraneous < code > ()</ code > in references, prefixes, and < code > kind_of</ code ></ li >
< li > feat: dimension and unit text output added</ li >
< li > feat: some light and radiation ISQ quantities added</ li >
< li > feat: allow configuring GSL library use</ li >
< li > feat: freestanding support added</ li >
< li > (!) refactor: < code > zero_Fahrenheit</ code > renamed to < code > zeroth_degree_Fahrenheit</ code ></ li >
< li > (!) refactor: SI-related trigonometric functions moved to the < code > si</ code > subnamespace</ li >
< li > (!) refactor: < code > math.h</ code > header file broke up to smaller pieces</ li >
< li > (!) refactor: < code > fixed_string</ code > interface refactored</ li >
< li > (!) refactor: < code > ReferenceOf</ code > does not take a dimension anymore</ li >
< li > (!) refactor: 'o' replaced with '1' as a modifier for < code > unit_symbol_solidus::one_denominator</ code ></ li >
< li > (!) refactor: < code > get_kind()</ code > now returns < code > kind_of</ code ></ li >
< li > (!) refactor: FMT macros moved to < code > compat_macros.h</ code ></ li >
< li > (!) refactor: < code > fixed_string</ code > refactored to reflect the latest changes to < a href = "https://wg21.link/P3094R2" > P3094R2</ a ></ li >
< li > (!) refactor: < code > basic_symbol_text</ code > renamed to < code > symbol_text</ code ></ li >
< li > (!) refactor: < code > ratio</ code > hidden as an implementation detail behind < code > mag_ratio</ code ></ li >
< li > (!) refactor: < code > framework.h</ code > introduced</ li >
< li > (!) refactor: type list tools made an implementation detail of the library</ li >
< li > (!) refactor: header files with the entire system definitions moved up in the directory tree</ li >
< li > (!) refactor: < code > absolute_point_origin</ code > does not use CRTP anymore</ li >
< li > refactor: system's units do not inherit from one another anymore</ li >
< li > refactor: all units made < code > final</ code ></ li >
< li > refactor: math functions constraints refactored</ li >
< li > refactor: < code > si_quantities.h</ code > added to improve compile-times</ li >
< li > refactor: < code > validate_ascii_string</ code > refactored to < code > is_basic_literal_character_set</ code ></ li >
< li > refactor: < code > underlying_type</ code > split to < code > wrapped_type</ code > and < code > value_type</ code > and used in code</ li >
< li > refactor: code refactored to comply with clang-tidy</ li >
< li > refactor: remove dependency on < code > < ranges> </ code > header and switch to use an iterator-based < code > copy</ code > algorithm</ li >
< li > refactor: < code > terminate</ code > replaced with < code > abort</ code > and a header file added</ li >
< li > refactor: most < code > std::remove_const_t</ code > removed and some replaced with the GCC-specific workaround</ li >
< li > refactor: not needed < code > remove_reference_t</ code > and < code > remove_cvref_t</ code > removed</ li >
< li > refactor: binary operators of < code > quantity</ code > and < code > quantity_point</ code > are now hidden friends</ li >
< li > fix: < code > QuantityLike</ code > conversions required < code > Q::rep</ code > instead of using one provided by < code > quantity_like_traits</ code ></ li >
< li > fix: < code > QuantitySpec[Unit]</ code > replaced with < code > make_reference</ code > in < code > value_cast</ code ></ li >
< li > fix: < code > ice_point</ code > is now defined with the integral offset from < code > absolute_zero</ code ></ li >
< li > fix: performance regression in < code > sudo_cast</ code > fixed</ li >
< li > fix: explicit object parameter support fixed</ li >
< li > fix: missing < code > version</ code > header file added to < code > hacks.h</ code ></ li >
< li > fix: < code > quantity_cast</ code > to accept lvalue references (thanks < a href = "https://github.com/burnpanck" > @burnpanck</ a > )</ li >
< li > fix: < code > value_cast</ code > with lvalue references to < code > quantity_point</ code > (thanks < a href = "https://github.com/burnpanck" > @burnpanck</ a > )</ li >
< li > docs: project blog and first posts added</ li >
< li > docs: project documentation layout refactored</ li >
< li > docs: "Interoperability with Other Libraries" chapter added</ li >
< li > docs: "Framework Basics" chapters updated and cleaned up</ li >
< li > docs: < code > smoot</ code > unit example added to the main page</ li >
< li > docs: "Code Example" chapter renamed to "Look and Feel" and reordered in TOC to be after "Quick Start"</ li >
< li > docs: "Quick Start" chapter reworked to be simpler and include quantity points</ li >
< li > docs: "Quantity points" chapter extended</ li >
< li > docs: "The Affine Space" chapter updated to reflect the recent design changes</ li >
< li > docs: "Working with Legacy interfaces" chapter added</ li >
< li > docs: "Text Output" chapter updated</ li >
< li > docs: mkdocs social plugin enabled</ li >
< li > docs: project logo and custom color scheme added</ li >
< li > docs: minimum compiler requirements updated</ li >
< li > docs: unit symbols admonition extended in the "Quick Start" chapter</ li >
< li > docs: Cairo dependency described in the MkDocs section</ li >
< li > docs: "hello units" example updated with dimensions output</ li >
< li > docs: "Text Output" chapter updated with the recent formatting changes</ li >
< li > docs: formatting grammar language changed to EBNF</ li >
< li > docs: "Project structure" chapter expanded</ li >
< li > docs: CITATION.cff updated</ li >
< li > (!) build: Conan and CMake options refactored</ li >
< li > (!) build: < code > MP_UNITS_AS_SYSTEM_HEADERS</ code > renamed to < code > MP_UNITS_BUILD_AS_SYSTEM_HEADERS</ code ></ li >
< li > (!) build: < code > MP_UNITS_BUILD_LA</ code > and < code > MP_UNITS_IWYU</ code > CMake options now have < code > _DEV_</ code > in the name</ li >
< li > build: gsl-lite updated to 0.41.0</ li >
< li > build: catch2 updated to 3.5.1</ li >
< li > build: fmt updated to 10.2.1</ li >
< li > build: gitpod environment updated</ li >
< li > build: < code > check_cxx_feature_supported</ code > added</ li >
< li > build: IWYU path handling fixed</ li >
< li > build: IWYU enabled on GCC</ li >
< li > build: < code > CMAKE_EXPORT_COMPILE_COMMANDS</ code > flag enabled for the developer's build</ li >
< li > build(conan): < code > generate()</ code > now set < code > cache_variables</ code ></ li >
< li > build(conan): < code > can_run</ code > check added before running tests</ li >
< li > ci: Conan and CMake CI now use different cache names</ li >
< li > ci: gcc-14 added</ li >
< li > ci: < code > clang-tidy</ code > CI added</ li >
</ ul >
< h3 id = "2.1.1" > 2.1.1 < small > May 16, 2024</ small >< a class = "headerlink" href = "#2.1.1" title = "Permanent link" > ¶ </ a ></ h3 >
< ul >
< li > fix: unit tests compilation on gcc-14 fixed</ li >
< li > fix: explicit < code > this</ code > parameter support fixed</ li >
</ ul >
< h3 id = "2.1.0" > 2.1.0 < small > December 9, 2023</ small >< a class = "headerlink" href = "#2.1.0" title = "Permanent link" > ¶ </ a ></ h3 >
< ul >
< li > (!) feat: < code > inverse()</ code > support added for dimensions, quantity_spec, units, and references
(< code > 1 / s</ code > will now create < code > quantity</ code > and not a < code > Unit</ code > )</ li >
< li > (!) feat: < code > quantity_point</ code > does not provide < code > zero()</ code > anymore</ li >
< li > (!) feat: < code > quantity_spec</ code > and its kind should not compare equal</ li >
< li > (!) feat: mutating interface removed from < code > fixed_string</ code ></ li >
< li > (!) feat: < code > common_type</ code > with a raw value is not needed anymore as for a long time now raw values are
not convertible to the dimensionless quantities</ li >
< li > (!) feat: < code > symbol_text</ code > definition simplified</ li >
< li > (!) feat: users are now allowed to inherit their own types from absolute point origins</ li >
< li > (!) feat: interoperability with other libraries redesigned</ li >
< li > feat: < code > basic_fixed_string(const CharT*, std::integral_constant< std::size_t, N> )</ code > constructor added</ li >
< li > feat: < code > isq::activity</ code > added and < code > becquerel</ code > definition updated to benefit from it</ li >
< li > feat: < code > gray</ code > and < code > sievert</ code > now have correct associated quantity kinds</ li >
< li > feat: < code > UnitCompatibleWith</ code > concept added and applied to < code > in(U)</ code > and < code > force_in(U)</ code > functions</ li >
< li > feat: quantities can now be multiplied and divided by units (no parenthesis needed anymore)</ li >
< li > feat: < code > Magnitude / Unit</ code > operator added</ li >
< li > feat: equality for dimensions now will allow derived classes as well (but not from < code > derived_dimension</ code > )</ li >
< li > feat: < code > zero_Fahrenheit</ code > point origin added</ li >
< li > feat: equivalent point origins handling improved</ li >
< li > feat(example): unit symbols added to the currency example</ li >
< li > (!) refactor: < code > unit_symbol< fmt> (U)</ code > signature refactored and the resulting text can now also be used at runtime</ li >
< li > (!) refactor: < code > make_xxx</ code > factory functions replaced with two-parameter constructors</ li >
< li > (!) refactor: < code > unit_symbol</ code > changed to < code > consteval</ code ></ li >
< li > refactor: < code > in(U)</ code > and < code > force_in(U)</ code > now return < code > auto</ code > to provide better diagnostics on clang</ li >
< li > refactor: < code > quantity</ code > operators constraints refactored</ li >
< li > refactor: more type members added to < code > fixed_string</ code > definition</ li >
< li > refactor: < code > unit_symbol_formatting</ code > enums now use < code > std::int8_t</ code > as a representation type</ li >
< li > fix: symbols of named dimensionless units with the ratio = 1 were not printed</ li >
< li > fix: iterator is now properly updated for all cases in < code > unit_symbol</ code ></ li >
< li > fix: Fahrenheit conversion ratio was inverted</ li >
< li > fix: < code > CommonlyInvocableQuantities</ code > was overconstrained for the current library design</ li >
< li > fix: < code > are_ingredients_convertible</ code > now mandates explicit conversion for < code > To</ code > dimensionless quantities</ li >
< li > fix: < code > quantity_point::point_for(PO)</ code > constraints fixed</ li >
< li > fix(example): < code > latitude</ code > and < code > longitude</ code > fixed to include < code > 0</ code > for < code > N</ code > and < code > E</ code > respectively</ li >
< li > ci: clang-17 enabled</ li >
< li > ci: apple-clang-15 enabled</ li >
< li > ci: Added C++23 builds to the CI matrix</ li >
< li > docs: "Getting Started" chapters updated</ li >
< li > docs: "Basic Concepts" and "Interface Introduction" chapters updated</ li >
< li > docs: "Design Overview" chapter added and "Concepts" chapter reworked</ li >
< li > docs: "Output stream formatting" chapter updated</ li >
< li > docs: "Default formatting" chapter updated</ li >
< li > docs: "Derived unit symbols generation" chapter added</ li >
< li > docs: outdated affine space chapter updated</ li >
< li > docs: < code > CameCase</ code > concept identifiers FAQ added</ li >
< li > docs: < code > gravitational_potential_energy</ code > equation fixed on a graph</ li >
< li > docs: YouTube video link updated to the C++ on Sea 2023</ li >
< li > docs: ISO papers reference added to docs and README</ li >
< li > docs: a representation type in a dimensionless quantity FAQ fixed</ li >
< li > docs: titles added to some important admonitions</ li >
< li > docs: "Terms and Definitions" slightly updated</ li >
< li > docs: "canonical unit" added to glossary and its documentation in code was updated</ li >
< li > docs: Design overview graph updated</ li >
</ ul >
< h3 id = "2.0.0" > 2.0.0 < small > September 24, 2023</ small >< a class = "headerlink" href = "#2.0.0" title = "Permanent link" > ¶ </ a ></ h3 >
< ul >
< li >< code > units</ code > namespace renamed to < code > mp_units</ code > (#317)</ li >
< li > header files in the < code > < mp-units/...> </ code > rather then in < code > < units/...> </ code > (#317)</ li >
< li > the downcasting facility is removed (#383, #211, #32)</ li >
< li > unified and simplified quantity creation (#274)</ li >
< li > determining the best way to create a quantity (#413)</ li >
< li > V2 < code > quantity_point</ code > (#414)</ li >
< li > introduction of < code > quantity_spec</ code > to store not only < code > dimension</ code > but also additional information about quantities (#405)</ li >
< li >< code > quantity</ code > now takes < code > reference</ code > object, which aggregates < code > quantity_spec</ code > and a < code > unit</ code > and a < code > representation</ code > type</ li >
< li > units, prefixes, dimensions, quantity specifications, and references are passed as NTTPs to templates and provide arithmetic operations and comparison</ li >
< li > expression templates consistently used in all derived types to increase the readability (#351, #166)</ li >
< li > derived dimensions are now factors of only base dimensions (#281)</ li >
< li > convertibility of derived quantities (#427)</ li >
< li > dimensions, quantity specifications, units, and references are now composable, significantly reducing the number of definitions and resulting types</ li >
< li > heavily simplified unit systems definitions (no need to define unnamed derived units, systems-specific dimensions, aliases for quantities, concepts, UDLs, ... anymore)</ li >
< li > improved definition of all systems</ li >
< li > support for ISO 80000 Part 3-6 quantities</ li >
< li > faster than lightspeed constants (#169)</ li >
< li > extensions to quantity formatting with < code > fmt</ code ></ li >
< li >< code > quantity_kind</ code > removed</ li >
< li > improved casting of unit with < code > .in(Unit)</ code > , < code > .force_in(Unit)</ code > for < code > quantity</ code > and < code > quantity_spec</ code ></ li >
< li > numerical value accessor safety improved with < code > .numerical_value_in(Unit)</ code > and < code > .force_numerical_value_in(Unit)</ code ></ li >
< li >< code > quantity</ code > can no longer be constructed with a raw value (#434)</ li >
< li > Implicit construction of quantities from a value (#410)</ li >
< li >< code > quantity_point</ code > can no longer be constructed with just a < code > quantity</ code > and an explicit < code > PointOrigin</ code > is always needed</ li >
< li >< code > ceil</ code > and < code > floor</ code > are dangerous (#432)</ li >
< li > quecto, ronto, ronna, quetta new SI prefixes support</ li >
< li > comparison against zero added (#487)</ li >
< li > documentation rewritten from scratch</ li >
< li > many smaller changes not possible to address with the previous design (#205, #210, #134)</ li >
</ ul >
< h3 id = "0.8.0" > 0.8.0 < small > June 14, 2023</ small >< a class = "headerlink" href = "#0.8.0" title = "Permanent link" > ¶ </ a ></ h3 >
< ul >
< li > (!) refactor: < code > common_quantity</ code > , < code > common_quantity_for</ code > , < code > common_quantity_point</ code > , < code > common_quantity_kind</ code > , and < code > common_quantity_point_kind</ code > removed</ li >
< li > (!) refactor: < code > named_derived_unit</ code > removed as it was not used</ li >
< li > (!) refactor: < code > derived_unit</ code > renamed to < code > derived_scaled_unit</ code ></ li >
< li > (!) refactor: < code > unit</ code > renamed to < code > derived_unit</ code ></ li >
< li > (!) refactor: < code > U::is_named</ code > removed from the unit types and replaced with < code > NamedUnit</ code > concept</ li >
< li > (!) refactor: < code > PrefixFamily</ code > support removed</ li >
< li > (!) refactor: < code > mi(naut)</ code > renamed to < code > nmi</ code ></ li >
< li > (!) refactor: < code > knot</ code > unit helper renamed to < code > kn</ code > in FPS</ li >
< li > (!) refactor: < code > knot</ code > text symbol changed from < code > "knot"</ code > to < code > "kn"</ code ></ li >
< li > refactor: < code > quantity</ code > < code > op+()</ code > and < code > op-()</ code > reimplemented in terms of < code > reference</ code > rather then < code > quantity</ code > types</ li >
< li > refactor(example): < code > glide_computer</ code > now use dimensionless quantities with < code > ranged_representation</ code > as < code > rep</ code ></ li >
< li > feat: HEP system support added (thanks < a href = "https://github.com/RalphSteinhagen" > @RalphSteinhagen</ a > )</ li >
< li > feat: < code > floor()</ code > , < code > ceil()</ code > , and < code > round()</ code > support added (thanks < a href = "https://github.com/hofbi" > @hofbi</ a > )</ li >
< li > feat: < code > std::format</ code > support for compliant compilers added</ li >
< li > feat: conversion helpers from < code > mp-units</ code > to < code > std::chrono</ code > types added</ li >
< li > feat: math functions can now be safely used with user-defined types</ li >
< li > feat: conversion from < code > quantity_point</ code > to < code > std::chrono::time_point</ code > added</ li >
< li > feat: < code > nautical_mile_per_hour</ code > and < code > knot</ code > added to < code > si::international</ code > system</ li >
< li > (!) fix: add < code > quantity_point::origin</ code > , like < code > std::chrono::time_point::clock</ code ></ li >
< li > fix: enable any prefixes for most of the named units (beside those that use prefixes already)</ li >
< li > fix: < code > hectare</ code > definition fixed to be a prefixed version of < code > are</ code > + other units</ li >
< li > fix: account for different dimensions in < code > quantity_point_cast</ code > 's constraint</ li >
< li > fix: output stream operator now properly handles state</ li >
< li > fix: < code > fmt</ code > algorithms were overconstrained with < code > forward_iterator</ code ></ li >
< li > fix: CTAD for aliases fixed</ li >
< li > fix: < code > derived_ratio</ code > calculation</ li >
< li > fix: < code > fill_t</ code > assignment operator fixed</ li >
< li > fix: improve downcast mode off</ li >
< li > fix: < code > radioactivity</ code > header compilation fixed</ li >
< li > fix: < code > si::hep::dim_momentum</ code > duplicated definition fixed</ li >
< li > fix: < code > fps</ code > can now coexist with < code > international</ code > system</ li >
< li > fix: public headers fixed to be standalone</ li >
< li > test: standalone public headers tests added</ li >
< li > (!) build: CMake generator in Conan is no longer obtained from an environment variable</ li >
< li > (!) build: Required Conan version bumped to 1.48</ li >
< li > (!) build: Conan 1.48 does not set < code > CMAKE_BUILD_TYPE</ code > in the < code > conan_toolchain.cmake</ code > anymore</ li >
< li > build: AppleClang 13 support added (thanks < a href = "https://github.com/fdischner" > @fdischner</ a > )</ li >
< li > build: most of the < code > conanfile.py</ code > refactored to be Conan 2.0 ready</ li >
< li > build: < code > validate()</ code > replaced with < code > configure()</ code > to raise errors during < code > conan install</ code > in Conan 1.X</ li >
< li > build: minimum Conan version changed to 1.40</ li >
< li > build: < code > linear-algebra</ code > Conan repo is no needed anymore</ li >
< li > build: Gitpod support added</ li >
< li > build: clang-format-15 support added</ li >
< li > build: export config to local build (#322)</ li >
< li > build: fix export name of < code > mp-units-system</ code ></ li >
< li > build: fmt updated to 8.0.1</ li >
< li > build: gsl-lite updated to 0.40.0</ li >
< li > build: catch2 updated to 2.13.9</ li >
< li > build: doxygen updated to 1.9.4</ li >
< li > build: linear_algebra/0.7.0 switched to wg21-linear_algebra/0.7.2</ li >
< li > ci: VS2022, gcc-11, clang-13, clang-14, and AppleClang 13 support added</ li >
< li > ci: pre-commit support added (thanks < a href = "https://github.com/hofbi" > @hofbi</ a > )</ li >
< li > docs: Project documentation updated</ li >
< li > docs: < code > CITATION.cff</ code > file added</ li >
< li > docs: < code > CONTRIBUTING.md</ code > updated</ li >
</ ul >
< h3 id = "0.7.0" > 0.7.0 < small > May 11, 2021</ small >< a class = "headerlink" href = "#0.7.0" title = "Permanent link" > ¶ </ a ></ h3 >
< ul >
< li > (!) refactor: < code > ScalableNumber</ code > renamed to < code > Representation</ code ></ li >
< li > (!) refactor: output stream operators moved to the < code > units/quantity_io.h</ code > header file</ li >
< li > (!) refactor: Refactored the library file tree</ li >
< li > (!) refactor: < code > quantity::count()</ code > renamed to < code > quantity::number()</ code ></ li >
< li > (!) refactor: < code > data</ code > system renamed to < code > isq::iec80000</ code > (quantity names renamed too)</ li >
< li > (!) refactor: < code > *deduced_unit</ code > renamed to < code > *derived_unit</ code ></ li >
< li > (!) refactor: got rid of a < code > noble_derived_unit</ code ></ li >
< li > refactor: quantity (kind) point updated to reflect latest changes to < code > quantity</ code ></ li >
< li > refactor: basic concepts, < code > quantity</ code > and < code > quantity_cast</ code > refactored</ li >
< li > refactor: < code > abs()</ code > definition refactored to be more explicit about the return type</ li >
< li > feat: quantity (point) kind support added (thanks < a href = "https://github.com/johelegp" > @johelegp</ a > )</ li >
< li > feat: quantity references support added (thanks < a href = "https://github.com/johelegp" > @johelegp</ a > )</ li >
< li > feat: quantity aliases support addded</ li >
< li > feat: interoperability with < code > std::chrono::duration</ code > and other units libraries</ li >
< li > feat: CTAD for dimensionless quantity added</ li >
< li > feat: < code > modulation_rate</ code > support added (thanks < a href = "https://github.com/go2sh" > @go2sh</ a > )</ li >
< li > feat: SI prefixes for < code > isq::iec80000</ code > support added (thanks < a href = "https://github.com/go2sh" > @go2sh</ a > )</ li >
< li > feat: a possibility to disable quantity UDLs support with < code > UNITS_NO_LITERALS</ code > preprocessor define</ li >
< li > feat: a support to define ISQ derived dimensions in terms of different number or order of components</ li >
< li > perf: preconditions check do not influence the runtime performance of a Release build</ li >
< li > perf: < code > quantity_cast()</ code > generates less assembly instructions</ li >
< li > perf: temporary string creation removed from < code > quantity::op<< ()</ code ></ li >
< li > perf: value initialization for quantity value removed (left with a default initialization)</ li >
< li > perf: limited the < code > equivalent</ code > trait usage</ li >
< li > perf: limited the C++ Standard Library headers usage</ li >
< li > perf: rvalue references support added for constructors and getters</ li >
< li > (!) fix: < code > exp()</ code > has sense only for dimensionless quantities</ li >
< li > (!) fix: < code > dim_torque</ code > now properly divides by an angle (instead of multiply) + default unit name change</ li >
< li > fix: quantity's operators fixed to behave like the underlying types do</ li >
< li > fix: < code > quantity_cast()</ code > fixed to work correctly with representation types not convertible from < code > std::intmax_t</ code ></ li >
< li > fix: ambiguous case for empty type list resolved</ li >
< li > fix: downcasting facility for non-default-constructible types</ li >
< li > fix: restore user-warnings within the library implementation</ li >
< li > fix: the text symbol of < code > foot_pound_force</ code > and < code > foot_pound_force_per_second</ code ></ li >
< li > fix: quantity modulo arithmetics fixed</ li >
< li > (!) build: Conan testing version is now hosted on < a href = "https://mpusz.jfrog.io/ui/packages/conan:%2F%2Fmp-units" > Artifactory</ a ></ li >
< li > (!) build: Linear Algebra is now hosted on its < a href = "https://twonington.jfrog.io/artifactory/api/conan/conan-oss" > Artifactory</ a ></ li >
< li > (!) build: < code > BUILD_DOCS</ code > CMake option renamed to < code > UNITS_BUILD_DOCS</ code ></ li >
< li > build: doxygen updated to 1.8.20</ li >
< li > build: catch2 updated to 2.13.4</ li >
< li > build: fmt updated to 7.1.3</ li >
< li > build: ms-gsl replaced with gsl-lite/0.38.0</ li >
< li > build: Conan generator switched to < code > cmake_find_package_multi</ code ></ li >
< li > build: Conan CMakeToolchain support added</ li >
< li > build: CMake scripts cleanup</ li >
< li > build: ccache support added</ li >
< li > ci: CI switched from Travis CI to GitHub Actions</ li >
</ ul >
< h3 id = "0.6.0" > 0.6.0 < small > September 13, 2020</ small >< a class = "headerlink" href = "#0.6.0" title = "Permanent link" > ¶ </ a ></ h3 >
< ul >
< li > feat: < code > quantity_point</ code > support added (thanks < a href = "https://github.com/johelegp" > @johelegp</ a > )</ li >
< li > feat: Added angle as SI base dimension (thanks < a href = "https://github.com/kwikius" > @kwikius</ a > )</ li >
< li > feat: < code > si::angular_velocity</ code > support added (thanks < a href = "https://github.com/mikeford3" > @mikeford3</ a > )</ li >
< li > feat: FPS system added (thanks < a href = "https://github.com/mikeford3" > @mikeford3</ a > )</ li >
< li > feat: Added support for mathematical function < code > exp(quantity)</ code ></ li >
< li > feat: Localization support for text output added (thanks < a href = "https://github.com/rbrugo" > @rbrugo</ a > )</ li >
< li > feat: Added STL random number distribution wrappers (thanks < a href = "https://github.com/yasamoka" > @yasamoka</ a > )</ li >
< li > (!) refactor: Refactored and cleaned up the library file tree</ li >
< li > (!) refactor: < code > q_*</ code > UDL renamed to < code > _q_*</ code ></ li >
< li > (!) refactor: UDLs with "per" in name renamed from < code > *p*</ code > to < code > *_per_*</ code ></ li >
< li > (!) refactor: < code > ratio</ code > changed to the NTTP kind</ li >
< li > (!) refactor: < code > exp</ code > and < code > Exp</ code > renamed to < code > exponent</ code > and < code > Exponent</ code ></ li >
< li > (!) refactor: < code > Scalar</ code > concept renamed to < code > ScalableNumber</ code ></ li >
< li > (!) refactor: Dimensionless quantities redesigned to be of a < code > quantity</ code > type</ li >
< li > refactor: < code > math.h</ code > function signatures refactored to use a < code > Quantity</ code > concept (thanks < a href = "https://github.com/kwikius" > @kwikius</ a > )</ li >
< li > refactor: < code > [[nodiscard]]</ code > added to many functions</ li >
< li > fix: < code > si::day</ code > unit symbol fixed to < code > d</ code > (thanks < a href = "https://github.com/komputerwiz" > @komputerwiz</ a > )</ li >
< li > fix: < code > si::mole</ code > unit symbol fixed to < code > mol</ code > (thanks < a href = "https://github.com/mikeford3" > @mikeford3</ a > )</ li >
< li > (!) build: gcc-9 is no longer supported (at least gcc-10 is required)</ li >
< li > build: Visual Studio 16.7 support added</ li >
< li > build: linear_algebra updated to 0.7.0/stable</ li >
< li > build: fmt updated to 7.0.3</ li >
< li > build: range-v3 updated to 0.11.0</ li >
< li > build: catch2 updated to 2.13.0</ li >
< li > build: doxygen updated to 1.8.18</ li >
< li > build: ms-gsl 3.1.0 dependency added</ li >
< li > build: Removed the dependency on a git submodule with common CMake scripts</ li >
</ ul >
< h3 id = "0.5.0" > 0.5.0 < small > May 17, 2020</ small >< a class = "headerlink" href = "#0.5.0" title = "Permanent link" > ¶ </ a ></ h3 >
< ul >
< li > Major refactoring and rewrite of the library</ li >
< li > Units are now independent from dimensions</ li >
< li > Dimensions now depend on units (base or coherent units are provided in a class template)</ li >
< li > Quantity gets a Dimension template parameter again (as unit does not provide information about
its dimension anymore)</ li >
< li > Spaceship operator support added</ li >
< li > Added official CGS system support</ li >
< li > Added official data information system support</ li >
< li > Repository file tree cleanup</ li >
< li >< code > ratio</ code > refactored to contain < code > Exp</ code > template parameter (thanks a lot < a href = "https://github.com/oschonrock" > @oschonrock</ a > !)</ li >
< li > SI fundamental constants added</ li >
< li >< code > q_</ code > prefix applied to all the UDLs (thanks < a href = "https://github.com/kwikius" > @kwikius</ a > )</ li >
< li >< code > unknown_unit</ code > renamed to < code > unknown_coherent_unit</ code ></ li >
< li > Project documentation greatly extended and switched to Sphinx</ li >
< li > A few more usage examples added</ li >
< li > ASCII-only output support added (thanks < a href = "https://github.com/yasamoka" > @yasamoka</ a > )</ li >
< li > Representation values formatting extended (thanks < a href = "https://github.com/rbrugo" > @rbrugo</ a > )</ li >
< li > Output streams formatting support added</ li >
< li > Linear algebra from < code > std::experimental::math</ code > support added</ li >
< li > Named SI units and their dimensions added (thanks < a href = "https://github.com/rbrugo" > @rbrugo</ a ></ li >
< li > libfmt updated to 6.2.0</ li >
< li > Added absolute functions and epsilon to math.h (thanks < a href = "https://github.com/mikeford3" > @mikeford3</ a > )</ li >
< li > Added a lot of prefixes to named units and introduced < code > alias_unit</ code > (thanks < a href = "https://github.com/yasamoka" > @yasamoka</ a > )</ li >
< li > Linking with Conan targets only when they exists (< a href = "https://github.com/mpusz/units/issues/98" > #98</ a > )</ li >
< li > All physical dimensions and units put into < code > physical</ code > namespace</ li >
< li > CMake improvements</ li >
< li > Velocity renamed to speed</ li >
</ ul >
< p > Many thanks to GitHub users < a href = "https://github.com/oschonrock" > @oschonrock</ a > ,
< a href = "https://github.com/kwikius" > @kwikius</ a > , and < a href = "https://github.com/i-ky" > @i-ky</ a > for their support
in drafting a new library design.</ p >
< h3 id = "0.4.0" > 0.4.0 < small > Nov 17, 2019</ small >< a class = "headerlink" href = "#0.4.0" title = "Permanent link" > ¶ </ a ></ h3 >
< ul >
< li > Support for derived dimensions in < code > exp</ code > added</ li >
< li > Added < code > pow()</ code > and < code > sqrt()</ code > operations on quantities</ li >
< li >< code > units</ code > removed from a < code > std::experimental</ code > namespace</ li >
< li > Downcasting facility refactored so the user does not have to write the boilerplate code anymore</ li >
< li > From now on base dimensions should inherit from < code > base_dimension</ code > class template</ li >
< li > Added unit symbols definitions to < code > base_dimension</ code > and derived units</ li >
< li > Added support for < code > operator<< </ code > on < code > quantity</ code ></ li >
< li >< code > fmt</ code > support added</ li >
< li > Derived unit factory helpers refactored</ li >
< li > Refactored the way prefixed units are defined</ li >
</ ul >
< h3 id = "0.3.1" > 0.3.1 < small > Sep 18, 2019</ small >< a class = "headerlink" href = "#0.3.1" title = "Permanent link" > ¶ </ a ></ h3 >
< ul >
< li > cmcstl2 dependency changed to range-v3 0.9.1</ li >
</ ul >
< h3 id = "0.3.0" > 0.3.0 < small > Sep 16, 2019</ small >< a class = "headerlink" href = "#0.3.0" title = "Permanent link" > ¶ </ a ></ h3 >
< ul >
< li > The design as described on CppCon 2019 talk (< a href = "https://youtu.be/0YW6yxkdhlU" > https://youtu.be/0YW6yxkdhlU</ a > )</ li >
< li > Applied the feedback from the Cologne evening session</ li >
< li >< code > upcasting_traits</ code > renamed to < code > downcasting_traits</ code ></ li >
< li >< code > Dimension</ code > template parameter removed from quantity</ li >
< li >< code > units</ code > moved to a < code > std::experimental</ code > namespace</ li >
< li > Leading underscore prefix removed from UDLs</ li >
< li > Added a few more derived dimensions</ li >
< li >< code > meter</ code > renamed to < code > metre</ code ></ li >
< li > Missing < code > operator*</ code > added</ li >
< li > Predefined dimensions moved to a dedicated directory</ li >
< li >< code > dimension_</ code > prefix removed from names of derived dimensions</ li >
< li > cmcstl2 library updated to 2019.09.19</ li >
< li >< code > base_dimension</ code > is a value provided as < code > const& </ code > to the < code > exp</ code > type</ li >
< li > integrated with Compiler Explorer</ li >
< li > gsl-lite dependency removed</ li >
< li > Fractional dimension exponents support added</ li >
< li >< code > QuantityOf</ code > concept introduced</ li >
< li >< code > quantity_cast< U, Rep> ()</ code > support added</ li >
</ ul >
< h3 id = "0.2.0" > 0.2.0 < small > July 18, 2019</ small >< a class = "headerlink" href = "#0.2.0" title = "Permanent link" > ¶ </ a ></ h3 >
< ul >
< li > The design as described on C++Now 2019 talk (< a href = "https://youtu.be/wKchCktZPHU" > https://youtu.be/wKchCktZPHU</ a > )</ li >
< li > Added C++20 features supported by gcc-9.1 (< code > std::remove_cvref_t</ code > , down with typename, < code > std::type_identity</ code > )</ li >
< li > Compile-time performance optimizations (< code > type_list</ code > , < code > common_ratio</ code > , < code > ratio</ code > , < code > conditional_t</ code > )</ li >
</ ul >
< h3 id = "0.1.0" > 0.1.0 < small > May 18, 2019</ small >< a class = "headerlink" href = "#0.1.0" title = "Permanent link" > ¶ </ a ></ h3 >
< ul >
< li > Initial library release</ li >
< li > Begin semantic versioning</ li >
< li > The last version to work with gcc-8</ li >
</ ul >
</ article >
</ div >
< script > var target = document . getElementById ( location . hash . slice ( 1 )); target && target . name && ( target . checked = target . name . startsWith ( "__tabbed_" ))</ script >
</ div >
< button type = "button" class = "md-top md-icon" data-md-component = "top" hidden >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" >< path d = "M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z" /></ svg >
Back to top
</ button >
</ main >
< footer class = "md-footer" >
< nav class = "md-footer__inner md-grid" aria-label = "Footer" >
< a href = "../blog/archive/2023/" class = "md-footer__link md-footer__link--prev" aria-label = "Previous: 2023" >
< div class = "md-footer__button md-icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" >< path d = "M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z" /></ svg >
</ div >
< div class = "md-footer__title" >
< span class = "md-footer__direction" >
Previous
</ span >
< div class = "md-ellipsis" >
2023
</ div >
</ div >
</ a >
</ nav >
< div class = "md-footer-meta md-typeset" >
< div class = "md-footer-meta__inner md-grid" >
< div class = "md-copyright" >
< div class = "md-copyright__highlight" >
Copyright © 2018-2023 Mateusz Pusz
</ div >
Made with
< a href = "https://squidfunk.github.io/mkdocs-material/" target = "_blank" rel = "noopener" >
Material for MkDocs
</ a >
</ div >
</ div >
</ div >
</ footer >
</ div >
< div class = "md-dialog" data-md-component = "dialog" >
< div class = "md-dialog__inner md-typeset" ></ div >
</ div >
< script id = "__config" type = "application/json" >{ "base" : ".." , "features" : [ "content.action.edit" , "content.action.view" , "content.code.annotate" , "content.code.copy" , "navigation.indexes" , "navigation.tabs" , "navigation.footer" , "navigation.top" , "search.highlight" , "search.share" , "search.suggest" , "toc.follow" , "toc.integrate" ], "search" : "../assets/javascripts/workers/search.6ce7567c.min.js" , "translations" : { "clipboard.copied" : "Copied to clipboard" , "clipboard.copy" : "Copy to clipboard" , "search.result.more.one" : "1 more on this page" , "search.result.more.other" : "# more on this page" , "search.result.none" : "No matching documents" , "search.result.one" : "1 matching document" , "search.result.other" : "# matching documents" , "search.result.placeholder" : "Type to start searching" , "search.result.term.missing" : "Missing" , "select.version" : "Select version" }, "version" : { "provider" : "mike" }}</ script >
< script src = "../assets/javascripts/bundle.83f73b43.min.js" ></ script >
< script src = "../javascripts/mathjax.js" ></ script >
< script src = "https://polyfill.io/v3/polyfill.min.js?features=es6" ></ script >
< script src = "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js" ></ script >
</ body >
</ html >