mirror of
https://github.com/mpusz/mp-units.git
synced 2025-07-30 10:27: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.
|
* explicitly not supported here.
|
||||||
*/
|
*/
|
||||||
template<typename T>
|
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
|
} // namespace detail
|
||||||
|
|
||||||
|
@ -128,16 +128,22 @@ static_assert(!detail::NamedQuantitySpec<decltype(1 / time)>);
|
|||||||
static_assert(detail::IntermediateDerivedQuantitySpec<decltype(1 / time)>);
|
static_assert(detail::IntermediateDerivedQuantitySpec<decltype(1 / time)>);
|
||||||
static_assert(!detail::QuantityKindSpec<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(QuantitySpec<decltype(kind_of<length> / kind_of<time>)>);
|
||||||
static_assert(!detail::BaseQuantitySpec<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::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(detail::QuantityKindSpec<decltype(kind_of<length> / kind_of<time>)>);
|
||||||
|
|
||||||
static_assert(QuantitySpec<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::BaseQuantitySpec<decltype(kind_of<length> * kind_of<time>)>);
|
||||||
static_assert(!detail::NamedQuantitySpec<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(detail::QuantityKindSpec<decltype(kind_of<length> * kind_of<time>)>);
|
||||||
|
|
||||||
// dimensionless
|
// dimensionless
|
||||||
@ -270,6 +276,9 @@ static_assert(is_of_type<acceleration * mass, derived_quantity_spec<acceleration
|
|||||||
static_assert(is_of_type<(acceleration * mass).dimension,
|
static_assert(is_of_type<(acceleration * mass).dimension,
|
||||||
derived_dimension<dim_length_, dim_mass_, per<mp_units::power<dim_time_, 2>>>>);
|
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
|
// power
|
||||||
static_assert(is_of_type<pow<2>(length), derived_quantity_spec<mp_units::power<length_, 2>>>);
|
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>>>);
|
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