Welcome to mp-units!¶
mp-units is a compile-time enabled feature-rich Modern C++ modular/header-only library that provides compile-time dimensional analysis and unit/quantity manipulation. Its key strengths include safety, performance, and developer experience.
The library source code is hosted on GitHub with a permissive MIT license.
Supported compilers
This library tries to provide the best user experience possible with the C++ language. To achieve that, it extensively uses the latest C++ language features.
Even though the library benefits from the latest C++ versions (if available), C++20 is enough to compile and use all of the library's functionality.
Please refer to C++ compiler support chapter for more details.
#include <iostream>
#include <print>
import mp_units;
using namespace mp_units;
inline constexpr struct smoot final : named_unit<"smoot", mag<67> * usc::inch> {} smoot;
int main()
{
constexpr quantity dist = 364.4 * smoot;
std::println("Harvard Bridge length = {::N[.1f]} ({::N[.1f]}, {::N[.2f]}) ± 1 εar",
dist, dist.in(usc::foot), dist.in(si::metre));
}
#include <mp-units/format.h>
#include <mp-units/systems/si.h>
#include <mp-units/systems/usc.h>
#include <print>
using namespace mp_units;
inline constexpr struct smoot final : named_unit<"smoot", mag<67> * usc::inch> {} smoot;
int main()
{
constexpr quantity dist = 364.4 * smoot;
std::println("Harvard Bridge length = {::N[.1f]} ({::N[.1f]}, {::N[.2f]}) ± 1 εar",
dist, dist.in(usc::foot), dist.in(si::metre));
}
Output:
What is smoot
?
The smoot (/ˈsmuːt/) is a nonstandard unit of length created as part of an MIT fraternity prank. It is named after Oliver R. Smoot, a fraternity pledge to Lambda Chi Alpha, who, in October 1958, lay on the Harvard Bridge (between Boston and Cambridge, Massachusetts) and was used by his fraternity brothers to measure the length of the bridge.
One smoot equals Oliver Smoot's height at the time of the prank (five feet and seven inches). The bridge's length was measured to be 364.4 smoots plus or minus one ear, with the "plus or minus" intended to express the measurement uncertainty.
Oliver Smoot graduated from MIT with the class of 1962, became a lawyer, and later became chairman of the American National Standards Institute (ANSI) and president of the International Organization for Standardization (ISO).
More on the smoot unit of length can be found at https://en.wikipedia.org/wiki/Smoot.
Important: Help needed!
The mp-units library might be the subject of ISO standardization for C++29. More on this can be found in the following ISO C++ proposals:
- P1935: A C++ Approach to Physical Units,
- P2980: A motivation, scope, and plan for a physical quantities and units library,
- P3045: Quantities and units library.
We are actively looking for parties interested in field-trialing the library.