diff --git a/example/ex2/ex2.cpp b/example/ex2/ex2.cpp index af2e80dd..97d32e0f 100644 --- a/example/ex2/ex2.cpp +++ b/example/ex2/ex2.cpp @@ -9,6 +9,7 @@ main () { namespace q = xo::qty::qty; namespace su = xo::qty::su; using xo::qty::with_units_from; + using xo::qty::with_units; using xo::qty::quantity; using xo::flatstring; using namespace std; @@ -30,12 +31,18 @@ main () { cerr << "a2: " << a2 << endl; - constexpr auto au = q::meter / (q::second * q::second); - constexpr auto a3 = with_units_from(a, au); + constexpr auto a3 = with_units(a); static_assert(a3.abbrev() == flatstring("m.s^-2")); cerr << "a3: " << a3 << endl; + + constexpr auto au = q::meter / (q::second * q::second); + constexpr auto a4 = with_units_from(a, au); + + static_assert(a4.abbrev() == flatstring("m.s^-2")); + + cerr << "a4: " << a4 << endl; } diff --git a/include/xo/unit/quantity.hpp b/include/xo/unit/quantity.hpp index 68fae4fe..2eff0adf 100644 --- a/include/xo/unit/quantity.hpp +++ b/include/xo/unit/quantity.hpp @@ -227,6 +227,14 @@ namespace xo { }; } /*namespace detail*/ + template + requires(quantity_concept + && Q1::always_constexpr_unit) + constexpr auto + with_units(const Q1 & x) { + return x.template rescale_ext(); + } + template requires (quantity_concept && quantity_concept