The Domain-Correct Quantities and Units Library for C++ — full quantity kind safety, ISO 80000 compliant, C++29 standardization candidate.
See the codemp-units – The Domain-Correct Quantities and Units Library for C++mp-units is a Modern C++ (C++20 and later) library providing the full spectrum
of compile-time safety for domain-specific quantities and units, from dimensional
analysis to quantity kind safety, built on the ISO 80000 International System of
Quantities (ISQ). It is a candidate for C++29 standardization
(P3045), your chance to shape the future of C++.
#include <mp-units/systems/isq.h>
#include <mp-units/systems/si.h>
using namespace mp_units;
using namespace mp_units::si::unit_symbols;
// Compile-time dimensional analysis — zero runtime overhead
static_assert(1 * km / (1 * s) == 1000 * m / s);
// Function signatures encode domain/physics, not just dimensions
void calculate_trajectory(quantity<isq::kinetic_energy[J]> e);
int main()
{
quantity<isq::potential_energy[J]> Ep = 42 * J;
quantity<isq::kinetic_energy[J]> Ek = 123 * J;
calculate_trajectory(Ek); // ✅ correct
// calculate_trajectory(Ep); // ❌ potential energy ≠ kinetic energy (both in J)
// quantity<Gy> q = 42 * Sv; // ❌ absorbed dose ≠ dose equivalent (both J/kg)
}
Beyond standard dimensional analysis and automatic unit conversions, mp-units provides additional safety levels:
Quantity Kind Safety — mp-units pioneered this level: it distinguishes quantities that share the same dimension but represent fundamentally different physical concepts: frequency (Hz) ≠ radioactive activity (Bq), absorbed dose (Gy) ≠ dose equivalent (Sv), plane angle (rad) ≠ solid angle (sr). Dimensional analysis alone cannot catch these errors, mp-units prevents them at compile time.
ISO 80000 (ISQ) Support — Built on the International System of Quantities, functions
can require specific quantities: isq::height (not just any isq::length),
isq::kinetic_energy (not just any isq::energy). The physics of your domain becomes
part of the type system.
Strongly-Typed Numerics for Any Domain — The quantity framework extends beyond physics: define semantically distinct types for item counts, financial values, identifiers, or any numeric abstraction that should never be silently mixed at compile time.
Safety
quantity and quantity_point)Performance
User Experience
Feature Rich
Easy to Extend
Low Adoption Cost
Extensive project documentation covers everything from getting started to advanced usage:
→ Explore the full documentation
For advanced development or contributions, we provide a preconfigured cloud development environment with GitHub Codespaces:
Alternatives:
For detailed environment documentation, see .devcontainer/README.md.
mp-units is a candidate for ISO standardization for C++29. The technical case is
documented in:
We are actively seeking organizations and individuals interested in field‑trialing the library!
Your experience matters. Real-world testimonials demonstrate value to the ISO C++ Committee and help potential adopters decide. Whether you are using mp-units in production, research, or education:
mp-units is made possible by our community of contributors!
We appreciate every contribution, from code to documentation to community support.
See the Contributors Page for the complete list and recognition details.
Ready to contribute? Check out our Contributing Guide to get started! 🚀
mp-units is developed as open source, with the goal of C++29 standardization. Your support helps sustain development and the standardization work.
Ways to support:
⭐ Star the repository – Show your appreciation and help others discover mp-units
💰 Become a sponsor – Financial support enables continued development
🏢 Sponsor as a company – If your company depends on mp-units or wants it in the C++ standard, a corporate sponsorship pays for the engineering and the standardization work directly. Get in touch to discuss it.
🎓 Book the workshop – Domain Modeling with the C++ Type System is a two-day workshop for teams, taught by the library's author. Every booking pays for part of the work on mp-units.
📢 Share your success story – Help demonstrate real-world value for standardization and other potential users
🤝 Contribute – Code, documentation, feedback, and community support
(top 24 of 44)
63 followers · starred Feb 2026
336 followers · starred Nov 2023
158 followers · starred Jun 2022
1,393 followers · starred Oct 2026
The Domain-Correct Quantities and Units Library for C++ — full quantity kind safety, ISO 80000 compliant, C++29 standardization candidate.
See the codemp-units – The Domain-Correct Quantities and Units Library for C++mp-units is a Modern C++ (C++20 and later) library providing the full spectrum
of compile-time safety for domain-specific quantities and units, from dimensional
analysis to quantity kind safety, built on the ISO 80000 International System of
Quantities (ISQ). It is a candidate for C++29 standardization
(P3045), your chance to shape the future of C++.
#include <mp-units/systems/isq.h>
#include <mp-units/systems/si.h>
using namespace mp_units;
using namespace mp_units::si::unit_symbols;
// Compile-time dimensional analysis — zero runtime overhead
static_assert(1 * km / (1 * s) == 1000 * m / s);
// Function signatures encode domain/physics, not just dimensions
void calculate_trajectory(quantity<isq::kinetic_energy[J]> e);
int main()
{
quantity<isq::potential_energy[J]> Ep = 42 * J;
quantity<isq::kinetic_energy[J]> Ek = 123 * J;
calculate_trajectory(Ek); // ✅ correct
// calculate_trajectory(Ep); // ❌ potential energy ≠ kinetic energy (both in J)
// quantity<Gy> q = 42 * Sv; // ❌ absorbed dose ≠ dose equivalent (both J/kg)
}
Beyond standard dimensional analysis and automatic unit conversions, mp-units provides additional safety levels:
Quantity Kind Safety — mp-units pioneered this level: it distinguishes quantities that share the same dimension but represent fundamentally different physical concepts: frequency (Hz) ≠ radioactive activity (Bq), absorbed dose (Gy) ≠ dose equivalent (Sv), plane angle (rad) ≠ solid angle (sr). Dimensional analysis alone cannot catch these errors, mp-units prevents them at compile time.
ISO 80000 (ISQ) Support — Built on the International System of Quantities, functions
can require specific quantities: isq::height (not just any isq::length),
isq::kinetic_energy (not just any isq::energy). The physics of your domain becomes
part of the type system.
Strongly-Typed Numerics for Any Domain — The quantity framework extends beyond physics: define semantically distinct types for item counts, financial values, identifiers, or any numeric abstraction that should never be silently mixed at compile time.
Safety
quantity and quantity_point)Performance
User Experience
Feature Rich
Easy to Extend
Low Adoption Cost
Extensive project documentation covers everything from getting started to advanced usage:
→ Explore the full documentation
For advanced development or contributions, we provide a preconfigured cloud development environment with GitHub Codespaces:
Alternatives:
For detailed environment documentation, see .devcontainer/README.md.
mp-units is a candidate for ISO standardization for C++29. The technical case is
documented in:
We are actively seeking organizations and individuals interested in field‑trialing the library!
Your experience matters. Real-world testimonials demonstrate value to the ISO C++ Committee and help potential adopters decide. Whether you are using mp-units in production, research, or education:
mp-units is made possible by our community of contributors!
We appreciate every contribution, from code to documentation to community support.
See the Contributors Page for the complete list and recognition details.
Ready to contribute? Check out our Contributing Guide to get started! 🚀
mp-units is developed as open source, with the goal of C++29 standardization. Your support helps sustain development and the standardization work.
Ways to support:
⭐ Star the repository – Show your appreciation and help others discover mp-units
💰 Become a sponsor – Financial support enables continued development
🏢 Sponsor as a company – If your company depends on mp-units or wants it in the C++ standard, a corporate sponsorship pays for the engineering and the standardization work directly. Get in touch to discuss it.
🎓 Book the workshop – Domain Modeling with the C++ Type System is a two-day workshop for teams, taught by the library's author. Every booking pays for part of the work on mp-units.
📢 Share your success story – Help demonstrate real-world value for standardization and other potential users
🤝 Contribute – Code, documentation, feedback, and community support
(top 24 of 44)
63 followers · starred Feb 2026
336 followers · starred Nov 2023
158 followers · starred Jun 2022
1,393 followers · starred Oct 2026