diff --git a/src/include/units/bits/tools.h b/src/include/units/bits/tools.h index 78235793..0c3389dd 100644 --- a/src/include/units/bits/tools.h +++ b/src/include/units/bits/tools.h @@ -110,4 +110,13 @@ namespace units { template using common_ratio_t = typename common_ratio::type; + // upcasting_traits + + template + struct upcasting_traits : std::type_identity {}; + + template + using upcasting_traits_t = typename upcasting_traits::type; + + } // namespace units diff --git a/src/include/units/dimension.h b/src/include/units/dimension.h index 0b0ba03b..62463f26 100644 --- a/src/include/units/dimension.h +++ b/src/include/units/dimension.h @@ -84,14 +84,6 @@ namespace units { template using exp_invert_t = typename exp_invert::type; - // dimension_traits - - template - struct dimension_traits : std::type_identity {}; - - template - using dimension_traits_t = typename dimension_traits::type; - // dimension template @@ -121,7 +113,7 @@ namespace units { struct dim_invert; template - struct dim_invert> : std::type_identity...>>> {}; + struct dim_invert> : std::type_identity...>>> {}; template using dim_invert_t = typename dim_invert::type; @@ -176,7 +168,7 @@ namespace units { struct dimension_multiply; template - struct dimension_multiply, dimension> : std::type_identity>> {}; + struct dimension_multiply, dimension> : std::type_identity>> {}; template using dimension_multiply_t = typename dimension_multiply::type; diff --git a/src/include/units/quantity.h b/src/include/units/quantity.h index 9e04c121..15db3a29 100644 --- a/src/include/units/quantity.h +++ b/src/include/units/quantity.h @@ -245,22 +245,22 @@ namespace units { template requires treat_as_floating_point> || std::ratio_multiply::den == 1 - quantity, unit_traits_t, std::ratio_multiply>>, std::common_type_t> + quantity, upcasting_traits_t, std::ratio_multiply>>, std::common_type_t> constexpr operator*(const quantity& lhs, const quantity& rhs) { using dim = dimension_multiply_t; - using ret = quantity>>, std::common_type_t>; + using ret = quantity>>, std::common_type_t>; return ret(lhs.count() * rhs.count()); } template - quantity, unit_traits_t, std::ratio>>, std::common_type_t> + quantity, upcasting_traits_t, std::ratio>>, std::common_type_t> constexpr operator/(const Rep1& v, const quantity& q) { using dim = dim_invert_t; - using ret = quantity>>, std::common_type_t>; + using ret = quantity>>, std::common_type_t>; using den = quantity>; return ret(v / den(q).count()); } @@ -285,12 +285,12 @@ namespace units { template requires treat_as_floating_point> || std::ratio_divide::den == 1 - quantity, unit_traits_t, std::ratio_divide>>, std::common_type_t> + quantity, upcasting_traits_t, std::ratio_divide>>, std::common_type_t> constexpr operator/(const quantity& lhs, const quantity& rhs) { using dim = dimension_divide_t; - using ret = quantity>>, std::common_type_t>; + using ret = quantity>>, std::common_type_t>; return ret(lhs.count() / rhs.count()); } @@ -364,7 +364,7 @@ namespace std { // todo: simplified template struct common_type, units::quantity> { - using type = units::quantity>>, + using type = units::quantity>>, std::common_type_t>; }; diff --git a/src/include/units/si/frequency.h b/src/include/units/si/frequency.h index 6b2efb8b..9d3b786c 100644 --- a/src/include/units/si/frequency.h +++ b/src/include/units/si/frequency.h @@ -28,25 +28,25 @@ namespace units { struct dimension_frequency : make_dimension_t> {}; - template<> struct dimension_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct millihertz : unit {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct hertz : unit> {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct kilohertz : unit {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct megahertz : unit {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct gigahertz : unit {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct terahertz : unit {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; template using frequency = quantity; diff --git a/src/include/units/si/length.h b/src/include/units/si/length.h index 70755960..94ee40db 100644 --- a/src/include/units/si/length.h +++ b/src/include/units/si/length.h @@ -28,19 +28,19 @@ namespace units { struct dimension_length : make_dimension_t> {}; - template<> struct dimension_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct millimeter : unit {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct centimeter : unit> {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct meter : unit> {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct kilometer : unit {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; template using length = quantity; diff --git a/src/include/units/si/time.h b/src/include/units/si/time.h index 0db0390c..e6b98457 100644 --- a/src/include/units/si/time.h +++ b/src/include/units/si/time.h @@ -28,25 +28,25 @@ namespace units { struct dimension_time : make_dimension_t> {}; - template<> struct dimension_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct nanosecond : unit {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct microsecond : unit {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct millisecond : unit {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct second : unit> {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct minute : unit> {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct hour : unit> {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; template using time = quantity; diff --git a/src/include/units/si/velocity.h b/src/include/units/si/velocity.h index 49dc4ee5..632c641a 100644 --- a/src/include/units/si/velocity.h +++ b/src/include/units/si/velocity.h @@ -29,16 +29,16 @@ namespace units { struct dimension_velocity : make_dimension_t, exp> {}; - template<> struct dimension_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct meter_per_second : unit> {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct kilometer_per_hour : unit> {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; struct mile_per_hour : unit> {}; - template<> struct unit_traits : std::type_identity {}; + template<> struct upcasting_traits : std::type_identity {}; template using velocity = quantity; diff --git a/src/include/units/unit.h b/src/include/units/unit.h index fdccda64..501c7844 100644 --- a/src/include/units/unit.h +++ b/src/include/units/unit.h @@ -53,12 +53,4 @@ namespace units { detail::is_unit && DerivedFrom; - // dimension_traits - - template - struct unit_traits : std::type_identity {}; - - template - using unit_traits_t = typename unit_traits::type; - } // namespace units