diff --git a/example/ex3/ex3.cpp b/example/ex3/ex3.cpp index 1af80d60..fd1520ab 100644 --- a/example/ex3/ex3.cpp +++ b/example/ex3/ex3.cpp @@ -7,13 +7,13 @@ int main () { namespace q = xo::qty::qty; - namespace u = xo::qty::nu; + namespace nu = xo::qty::nu; using xo::qty::quantity; using xo::flatstring; using namespace std; - constexpr quantity t = q::minutes(2); - constexpr quantity d = q::kilometers(2.5); + constexpr quantity t = q::minutes(2); + constexpr quantity d = q::kilometers(2.5); constexpr auto t2 = t*t; constexpr auto a = d / (t*t); diff --git a/include/xo/unit/quantity.hpp b/include/xo/unit/quantity.hpp index ecaef42a..2fa467d3 100644 --- a/include/xo/unit/quantity.hpp +++ b/include/xo/unit/quantity.hpp @@ -276,39 +276,63 @@ namespace xo { namespace qty { // ----- mass ----- - inline constexpr auto picograms(double x) { return quantity(x); } - inline constexpr auto nanograms(double x) { return quantity(x); } - inline constexpr auto micrograms(double x) { return quantity(x); } - inline constexpr auto milligrams(double x) { return quantity(x); } - inline constexpr auto grams(double x) { return quantity(x); } - inline constexpr auto kilograms(double x) { return quantity(x); } - inline constexpr auto tonnes(double x) { return quantity(x); } - inline constexpr auto kilotonnes(double x) { return quantity(x); } - inline constexpr auto megatonnes(double x) { return quantity(x); } - inline constexpr auto gigatonnes(double x) { return quantity(x); } + template + inline constexpr auto picograms(Repr x) { return quantity(x); } + template + inline constexpr auto nanograms(Repr x) { return quantity(x); } + template + inline constexpr auto micrograms(Repr x) { return quantity(x); } + template + inline constexpr auto milligrams(Repr x) { return quantity(x); } + template + inline constexpr auto grams(Repr x) { return quantity(x); } + template + inline constexpr auto kilograms(Repr x) { return quantity(x); } + template + inline constexpr auto tonnes(Repr x) { return quantity(x); } + template + inline constexpr auto kilotonnes(Repr x) { return quantity(x); } + template + inline constexpr auto megatonnes(Repr x) { return quantity(x); } + template + inline constexpr auto gigatonnes(Repr x) { return quantity(x); } // ----- distance ----- - inline constexpr auto picometers(double x) { return quantity(x); } - inline constexpr auto nanometers(double x) { return quantity(x); } - inline constexpr auto micrometers(double x) { return quantity(x); } - inline constexpr auto millimeters(double x) { return quantity(x); } - inline constexpr auto meters(double x) { return quantity(x); } - inline constexpr auto kilometers(double x) { return quantity(x); } - inline constexpr auto megameters(double x) { return quantity(x); } - inline constexpr auto gigameters(double x) { return quantity(x); } + template + inline constexpr auto picometers(Repr x) { return quantity(x); } + template + inline constexpr auto nanometers(Repr x) { return quantity(x); } + template + inline constexpr auto micrometers(Repr x) { return quantity(x); } + template + inline constexpr auto millimeters(Repr x) { return quantity(x); } + template + inline constexpr auto meters(Repr x) { return quantity(x); } + template + inline constexpr auto kilometers(Repr x) { return quantity(x); } + template + inline constexpr auto megameters(Repr x) { return quantity(x); } + template + inline constexpr auto gigameters(Repr x) { return quantity(x); } - inline constexpr auto lightseconds(double x) { return quantity(x); } - inline constexpr auto astronomicalunits(double x) { return quantity(x); } + template + inline constexpr auto lightseconds(Repr x) { return quantity(x); } + template + inline constexpr auto astronomicalunits(Repr x) { return quantity(x); } static constexpr auto meter = meters(1); // ----- time ----- - inline constexpr auto picoseconds(double x) { return quantity(x); } - inline constexpr auto nanoseconds(double x) { return quantity(x); } - inline constexpr auto microseconds(double x) { return quantity(x); } - inline constexpr auto milliseconds(double x) { return quantity(x); } + template + inline constexpr auto picoseconds(Repr x) { return quantity(x); } + template + inline constexpr auto nanoseconds(Repr x) { return quantity(x); } + template + inline constexpr auto microseconds(Repr x) { return quantity(x); } + template + inline constexpr auto milliseconds(Repr x) { return quantity(x); } template inline constexpr auto seconds(Repr x) { return quantity(x); } @@ -316,23 +340,33 @@ namespace xo { template inline constexpr auto minutes(Repr x) { return quantity(x); } - inline constexpr auto hours(double x) { return quantity(x); } - inline constexpr auto days(double x) { return quantity(x); } - inline constexpr auto weeks(double x) { return quantity(x); } - inline constexpr auto months(double x) { return quantity(x); } - inline constexpr auto years(double x) { return quantity(x); } - inline constexpr auto year250s(double x) { return quantity(x); } - inline constexpr auto year360s(double x) { return quantity(x); } - inline constexpr auto year365s(double x) { return quantity(x); } - //inline constexpr auto year366s(double x) { return quantity(x); } + template + inline constexpr auto hours(Repr x) { return quantity(x); } + template + inline constexpr auto days(Repr x) { return quantity(x); } + template + inline constexpr auto weeks(Repr x) { return quantity(x); } + template + inline constexpr auto months(Repr x) { return quantity(x); } + template + inline constexpr auto years(Repr x) { return quantity(x); } + template + inline constexpr auto year250s(Repr x) { return quantity(x); } + template + inline constexpr auto year360s(Repr x) { return quantity(x); } + template + inline constexpr auto year365s(Repr x) { return quantity(x); } + //inline constexpr auto year366s(Repr x) { return quantity(x); } static constexpr auto second = seconds(1); // ----- volatility ----- /* volatility in units of 1/yr */ - inline constexpr auto volatility_250d(double x) { return quantity(x); } - inline constexpr auto volatility_360d(double x) { return quantity(x); } + template + inline constexpr auto volatility_250d(Repr x) { return quantity(x); } + template + inline constexpr auto volatility_360d(Repr x) { return quantity(x); } } /* reminder: see [quantity_ops.hpp] for operator* etc */