mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-07 06:04:27 +02:00
feat: equality for dimensions now will allow derived classes as well (but not from derived_dimension
)
This commit is contained in:
@@ -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<typename T>
|
||||
concept DerivedDimension = is_derived_from_specialization_of<T, derived_dimension>;
|
||||
concept DerivedDimension = is_specialization_of<T, derived_dimension> || is_dimension_one<T>::value;
|
||||
|
||||
} // namespace detail
|
||||
|
||||
|
@@ -153,7 +153,7 @@ template<Dimension Lhs, Dimension Rhs>
|
||||
template<Dimension Lhs, Dimension Rhs>
|
||||
[[nodiscard]] consteval bool operator==(Lhs, Rhs)
|
||||
{
|
||||
return is_same_v<Lhs, Rhs>;
|
||||
return std::derived_from<Lhs, Rhs> || std::derived_from<Rhs, Lhs>;
|
||||
}
|
||||
|
||||
[[nodiscard]] consteval Dimension auto inverse(Dimension auto d) { return dimension_one / d; }
|
||||
|
@@ -61,8 +61,8 @@ static_assert(detail::DerivedDimension<std::remove_const_t<decltype(isq::dim_len
|
||||
static_assert(detail::DerivedDimension<std::remove_const_t<decltype(inverse(isq::dim_time))>>);
|
||||
static_assert(detail::DerivedDimension<std::remove_const_t<decltype(pow<2>(isq::dim_length))>>);
|
||||
static_assert(detail::DerivedDimension<derived_dimension<struct isq::dim_length, per<struct isq::dim_time>>>);
|
||||
static_assert(detail::DerivedDimension<dim_speed>);
|
||||
static_assert(detail::DerivedDimension<struct dimension_one>);
|
||||
static_assert(!detail::DerivedDimension<dim_speed>);
|
||||
static_assert(!detail::DerivedDimension<struct isq::dim_length>);
|
||||
static_assert(!detail::DerivedDimension<struct si::metre>);
|
||||
static_assert(!detail::DerivedDimension<int>);
|
||||
@@ -73,8 +73,8 @@ static_assert(Dimension<std::remove_const_t<decltype(isq::dim_length / isq::dim_
|
||||
static_assert(Dimension<std::remove_const_t<decltype(inverse(isq::dim_time))>>);
|
||||
static_assert(Dimension<std::remove_const_t<decltype(pow<2>(isq::dim_length))>>);
|
||||
static_assert(Dimension<derived_dimension<struct isq::dim_length, per<struct isq::dim_time>>>);
|
||||
static_assert(Dimension<dim_speed>);
|
||||
static_assert(Dimension<struct dimension_one>);
|
||||
static_assert(!Dimension<dim_speed>);
|
||||
static_assert(!Dimension<base_dimension<"L">>);
|
||||
static_assert(!Dimension<struct si::metre>);
|
||||
static_assert(!Dimension<int>);
|
||||
|
Reference in New Issue
Block a user