diff --git a/src/include/units/dimension.h b/src/include/units/dimension.h index 489166f7..0b0ba03b 100644 --- a/src/include/units/dimension.h +++ b/src/include/units/dimension.h @@ -59,13 +59,19 @@ namespace units { template concept bool Exponent = detail::is_exp; - // exp_less + // exp_dim_id_less template - struct exp_less : dim_id_less { + struct exp_dim_id_less : dim_id_less { }; - // exp_invert + // exp_dim_id_less + + template + struct exp_greater_equal : std::bool_constant<(E1::value >= E2::value)> { + }; + +// exp_invert template struct exp_invert; @@ -158,7 +164,7 @@ namespace units { template struct make_dimension { - using type = detail::dim_consolidate_t, exp_less>>; + using type = mp::type_list_sort_t, exp_dim_id_less>>, exp_greater_equal>; }; template diff --git a/test/test_dimension.cpp b/test/test_dimension.cpp index dd09d602..1c30c757 100644 --- a/test/test_dimension.cpp +++ b/test/test_dimension.cpp @@ -59,7 +59,7 @@ namespace { static_assert(std::is_same_v, e<1, 1>, e<2, 1>>, dimension>>, dimension, e<1, 1>, e<2, 1>, e<3, 1>>>); static_assert(std::is_same_v, e<1, 1>, e<2, 1>>, dimension>>, - dimension, e<1, 2>, e<2, 1>>>); + dimension, e<0, 1>, e<2, 1>>>); static_assert(std::is_same_v, e<1, 1>, e<2, 1>>, dimension>>, dimension, e<2, 1>>>); diff --git a/test/test_type_list.cpp b/test/test_type_list.cpp index abdaf9ed..cec30a93 100644 --- a/test/test_type_list.cpp +++ b/test/test_type_list.cpp @@ -108,13 +108,13 @@ namespace { dim_sort_t, dim_id<27>, dim_id<43>, dim_id<3>, dim_id<9>, dim_id<82>, dim_id<10>>>, type_list, dim_id<9>, dim_id<10>, dim_id<27>, dim_id<38>, dim_id<43>, dim_id<82>>>); - // exp_less + // exp_dim_id_less template using e = exp, Value>; template - using exp_sort_t = type_list_sort_t; + using exp_sort_t = type_list_sort_t; static_assert(std::is_same_v>>, dimension>>); static_assert(std::is_same_v, e<1, -1>>>, dimension, e<1, -1>>>);