mirror of
https://github.com/mpusz/mp-units.git
synced 2025-07-29 18:07:16 +02:00
fix: IntermediateDerivedQuantitySpec
now also accounts for kind_of
This commit is contained in:
@ -131,7 +131,10 @@ namespace detail {
|
||||
* explicitly not supported here.
|
||||
*/
|
||||
template<typename T>
|
||||
concept IntermediateDerivedQuantitySpec = is_specialization_of<T, derived_quantity_spec>;
|
||||
concept IntermediateDerivedQuantitySpec =
|
||||
is_specialization_of<T, derived_quantity_spec> ||
|
||||
(QuantityKindSpec<T> &&
|
||||
is_specialization_of<std::remove_const_t<decltype(T::_quantity_spec_)>, derived_quantity_spec>);
|
||||
|
||||
} // namespace detail
|
||||
|
||||
|
@ -128,16 +128,22 @@ static_assert(!detail::NamedQuantitySpec<decltype(1 / time)>);
|
||||
static_assert(detail::IntermediateDerivedQuantitySpec<decltype(1 / time)>);
|
||||
static_assert(!detail::QuantityKindSpec<decltype(1 / time)>);
|
||||
|
||||
static_assert(QuantitySpec<kind_of_<length / time>>);
|
||||
static_assert(!detail::BaseQuantitySpec<kind_of_<length / time>>);
|
||||
static_assert(!detail::NamedQuantitySpec<kind_of_<length / time>>);
|
||||
static_assert(detail::IntermediateDerivedQuantitySpec<kind_of_<length / time>>);
|
||||
static_assert(detail::QuantityKindSpec<kind_of_<length / time>>);
|
||||
|
||||
static_assert(QuantitySpec<decltype(kind_of<length> / kind_of<time>)>);
|
||||
static_assert(!detail::BaseQuantitySpec<decltype(kind_of<length> / kind_of<time>)>);
|
||||
static_assert(!detail::NamedQuantitySpec<decltype(kind_of<length> / kind_of<time>)>);
|
||||
static_assert(!detail::IntermediateDerivedQuantitySpec<decltype(kind_of<length> / kind_of<time>)>);
|
||||
static_assert(detail::IntermediateDerivedQuantitySpec<decltype(kind_of<length> / kind_of<time>)>);
|
||||
static_assert(detail::QuantityKindSpec<decltype(kind_of<length> / kind_of<time>)>);
|
||||
|
||||
static_assert(QuantitySpec<decltype(kind_of<length> * kind_of<time>)>);
|
||||
static_assert(!detail::BaseQuantitySpec<decltype(kind_of<length> * kind_of<time>)>);
|
||||
static_assert(!detail::NamedQuantitySpec<decltype(kind_of<length> * kind_of<time>)>);
|
||||
static_assert(!detail::IntermediateDerivedQuantitySpec<decltype(kind_of<length> * kind_of<time>)>);
|
||||
static_assert(detail::IntermediateDerivedQuantitySpec<decltype(kind_of<length> * kind_of<time>)>);
|
||||
static_assert(detail::QuantityKindSpec<decltype(kind_of<length> * kind_of<time>)>);
|
||||
|
||||
// dimensionless
|
||||
@ -270,6 +276,9 @@ static_assert(is_of_type<acceleration * mass, derived_quantity_spec<acceleration
|
||||
static_assert(is_of_type<(acceleration * mass).dimension,
|
||||
derived_dimension<dim_length_, dim_mass_, per<mp_units::power<dim_time_, 2>>>>);
|
||||
|
||||
static_assert(is_of_type<kind_of<length> / kind_of<time>, kind_of_<derived_quantity_spec<length_, per<time_>>{}>>);
|
||||
static_assert(is_of_type<kind_of<length / time>, kind_of_<derived_quantity_spec<length_, per<time_>>{}>>);
|
||||
|
||||
// power
|
||||
static_assert(is_of_type<pow<2>(length), derived_quantity_spec<mp_units::power<length_, 2>>>);
|
||||
static_assert(is_of_type<pow<1, 2>(length), derived_quantity_spec<mp_units::power<length_, 1, 2>>>);
|
||||
|
Reference in New Issue
Block a user