We're excited to announce a major enhancement to the mp-units documentation: an
automated systems reference generator that extracts and documents all quantities, units,
dimensions, and their relationships directly from the library's C++ source code.
A new product version can be obtained from
GitHub
and
Conan.
I initially had different plans for this release, but during development, it became
clear that the new major feature I was working on was too large and would require
breaking changes. This put me off track, and unfortunately, the mp-units development
slowed down recently 😞
It also turned out that I got laid off, so now I depend solely on my C++ trainer's career
to earn money to live. Fortunately, I delivered many in-house C++ trainings to my
customers this year, and I hope this will also be the case in the upcoming 2026. I was
also busy preparing for new talks and classes at this year's C++ conferences.
Having that much on my plate, a break from mp-units was needed to not burn out on the
way. But hopefully I am back now, and I plan to continue working on long-awaited features.
This release contains many small patches and improvements.
This post describes the most significant changes while a much longer list of the
changes introduced by the new version can be found in our
Release Notes.
An absolute quantity represents an absolute amount of a physical property —
measured from a true, physically meaningful zero. Examples include mass in kilograms,
temperature in Kelvin, or length in meters (as a size, not a position). Such
quantities live on a ratio scale and have a well-defined origin; negative values are
typically meaningless.
Absolute quantities stand in contrast to:
Affine points (e.g., \(20\ \mathrm{°C}\), \(100\ \mathrm{m}\ \mathrm{AMSL}\)) — values
measured relative to an arbitrary or conventional origin.
Deltas (e.g., \(10\ \mathrm{K}\), \(–5\ \mathrm{kg}\)) — differences between two values.
Arithmetic on absolute quantities behaves like ordinary algebra: addition, subtraction,
and scaling are well-defined and map naturally to physical reasoning. This article
proposes making absolute quantities the default abstraction in mp-units V3,
reflecting how scientists express equations in practice.
Note: Revised October 31 2025 for clarity, accuracy, and completeness.
All quantities and units libraries need to be unit-safe. Most of the libraries
on the market do this correctly. Some of them are also dimension-safe, which
adds another level of protection for their users.
mp-units is probably the only library on the market that additionally is
quantity-safe. This gives a new quality and possibilities. I've described the
major idea behind it, implementation details, and benefits to the users in the
series of posts about the International System of Quantities.
However, this is only the beginning. We've always planned more and worked on the
extensions in our free time. In this post, I will describe:
What a quantity character is?
The importance of using proper representation types for the quantities.
The power of providing character-specific operations for the quantities.
Discuss implementation challenges and possible solutions.
The Wrocław 2024 meeting was another efficient step in the standardization of
this library. We've spent the entire day on the joint LEWGI and SG6 discussion
and got lots of feedback. We've also introduced std::fixed_string to LEWG for
C++26.
A new product version can be obtained from
GitHub and
Conan.
This release was unexpected. We planned a significant new feature to happen next, but while
preparing for it and writing API Reference documentation, we made so many vital fixes and
improvements that we decided they deserve a dedicated release first.
This post describes the most significant improvements while a much longer list
of the changes introduced by the new version can be found in our
Release Notes.
In the previous articles, we introduced the International System of Quantities,
described how we can model and implement it in a programming language, and
presented the issues of software that does not use such abstraction to
implement a units library.
Some of the issues raised in
Part 2 of our series were
addressed in Part 3 already. This article will
present how our ISQ model elegantly addresses the remaining problems.
Up until now, we have introduced the International System of Quantities and
described how we can model its main aspects. This article will present how to
implement those models in a programming language, and we will point out some of
the first issues that stand in our way.
The physical units libraries on the market typically only focus on modeling one
or more systems of units. However, as we have learned, this is not the only
system kind to model. Another, and maybe even more important, is a system of
quantities. The most important example here is the International System of
Quantities (ISQ) defined by ISO/IEC 80000.
This article continues our series about the International System of Quantities.
This time, we will learn about the main ideas behind the ISQ and describe how
it can be modelled in a programming language.