diff --git a/src/core/include/mp-units/bits/dimension_concepts.h b/src/core/include/mp-units/bits/dimension_concepts.h index 5a5991e4..770c0f7b 100644 --- a/src/core/include/mp-units/bits/dimension_concepts.h +++ b/src/core/include/mp-units/bits/dimension_concepts.h @@ -85,11 +85,11 @@ namespace detail { /** * @brief A concept matching all derived dimensions in the library. * - * Satisfied by all dimension types either being a specialization of `derived_dimension` - * or derived from it (inheritance needed to properly handle `dimension_one`). + * Satisfied by all dimension types being a specialization of `derived_dimension` or + * being the `dimension_one`. */ template -concept DerivedDimension = is_derived_from_specialization_of; +concept DerivedDimension = is_specialization_of || is_dimension_one::value; } // namespace detail diff --git a/src/core/include/mp-units/dimension.h b/src/core/include/mp-units/dimension.h index a0a4dc8b..f04d7363 100644 --- a/src/core/include/mp-units/dimension.h +++ b/src/core/include/mp-units/dimension.h @@ -153,7 +153,7 @@ template template [[nodiscard]] consteval bool operator==(Lhs, Rhs) { - return is_same_v; + return std::derived_from || std::derived_from; } [[nodiscard]] consteval Dimension auto inverse(Dimension auto d) { return dimension_one / d; } diff --git a/test/unit_test/static/concepts_test.cpp b/test/unit_test/static/concepts_test.cpp index b63228b0..978e1356 100644 --- a/test/unit_test/static/concepts_test.cpp +++ b/test/unit_test/static/concepts_test.cpp @@ -61,8 +61,8 @@ static_assert(detail::DerivedDimension>); static_assert(detail::DerivedDimension(isq::dim_length))>>); static_assert(detail::DerivedDimension>>); -static_assert(detail::DerivedDimension); static_assert(detail::DerivedDimension); +static_assert(!detail::DerivedDimension); static_assert(!detail::DerivedDimension); static_assert(!detail::DerivedDimension); static_assert(!detail::DerivedDimension); @@ -73,8 +73,8 @@ static_assert(Dimension>); static_assert(Dimension(isq::dim_length))>>); static_assert(Dimension>>); -static_assert(Dimension); static_assert(Dimension); +static_assert(!Dimension); static_assert(!Dimension>); static_assert(!Dimension); static_assert(!Dimension);