mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-07 06:04:27 +02:00
feat: BaseQuantitySpec
concept removed as it had no use
This commit is contained in:
@@ -60,18 +60,6 @@ template<typename T>
|
||||
inline constexpr bool is_derived_from_specialization_of_quantity_spec =
|
||||
requires(T* t) { to_base_specialization_of_quantity_spec(t); };
|
||||
|
||||
#ifdef __cpp_explicit_this_parameter
|
||||
template<BaseDimension auto Dim, auto... Args>
|
||||
void to_base_specialization_of_base_quantity_spec(const volatile quantity_spec<Dim, Args...>*);
|
||||
#else
|
||||
template<typename Self, BaseDimension auto Dim, auto... Args>
|
||||
void to_base_specialization_of_base_quantity_spec(const volatile quantity_spec<Self, Dim, Args...>*);
|
||||
#endif
|
||||
|
||||
template<typename T>
|
||||
inline constexpr bool is_derived_from_specialization_of_base_quantity_spec =
|
||||
requires(T* t) { to_base_specialization_of_base_quantity_spec(t); };
|
||||
|
||||
template<typename T>
|
||||
inline constexpr bool is_specialization_of_quantity_spec = false;
|
||||
|
||||
@@ -92,15 +80,6 @@ template<typename T>
|
||||
concept NamedQuantitySpec = is_derived_from_specialization_of_quantity_spec<T> &&
|
||||
(!is_specialization_of_quantity_spec<T>)&&(!QuantityKindSpec<T>);
|
||||
|
||||
/**
|
||||
* @brief Concept matching all named base quantity specification types
|
||||
*
|
||||
* Satisfied by all types that derive from `quantity_spec` taking a base dimension
|
||||
* as a template parameter.
|
||||
*/
|
||||
template<typename T>
|
||||
concept BaseQuantitySpec = NamedQuantitySpec<T> && is_derived_from_specialization_of_base_quantity_spec<T>;
|
||||
|
||||
template<typename T>
|
||||
struct is_dimensionless : std::false_type {};
|
||||
|
||||
|
@@ -107,18 +107,6 @@ static_assert(!detail::NamedQuantitySpec<speed>);
|
||||
static_assert(!detail::NamedQuantitySpec<struct isq::dim_length>);
|
||||
static_assert(!detail::NamedQuantitySpec<int>);
|
||||
|
||||
// BaseQuantitySpec
|
||||
static_assert(detail::BaseQuantitySpec<struct isq::length>);
|
||||
static_assert(detail::BaseQuantitySpec<struct isq::radius>);
|
||||
static_assert(!detail::BaseQuantitySpec<std::remove_const_t<decltype(kind_of<isq::length>)>>);
|
||||
static_assert(!detail::BaseQuantitySpec<struct isq::speed>);
|
||||
static_assert(!detail::BaseQuantitySpec<std::remove_const_t<decltype(isq::length / isq::time)>>);
|
||||
static_assert(!detail::BaseQuantitySpec<std::remove_const_t<decltype(pow<2>(isq::length))>>);
|
||||
static_assert(!detail::BaseQuantitySpec<struct dimensionless>);
|
||||
static_assert(!detail::BaseQuantitySpec<speed>);
|
||||
static_assert(!detail::BaseQuantitySpec<struct isq::dim_length>);
|
||||
static_assert(!detail::BaseQuantitySpec<int>);
|
||||
|
||||
// IntermediateDerivedQuantitySpec
|
||||
static_assert(!detail::IntermediateDerivedQuantitySpec<struct isq::length>);
|
||||
static_assert(!detail::IntermediateDerivedQuantitySpec<struct isq::radius>);
|
||||
|
@@ -88,111 +88,93 @@ QUANTITY_SPEC_(kinetic_energy, mechanical_energy, mass* pow<2>(speed));
|
||||
|
||||
// concepts verification
|
||||
static_assert(QuantitySpec<length_>);
|
||||
static_assert(detail::BaseQuantitySpec<length_>);
|
||||
static_assert(detail::NamedQuantitySpec<length_>);
|
||||
static_assert(!detail::IntermediateDerivedQuantitySpec<length_>);
|
||||
static_assert(!detail::QuantityKindSpec<length_>);
|
||||
|
||||
static_assert(QuantitySpec<frequency_>);
|
||||
static_assert(!detail::BaseQuantitySpec<frequency_>);
|
||||
static_assert(detail::NamedQuantitySpec<frequency_>);
|
||||
static_assert(!detail::IntermediateDerivedQuantitySpec<frequency_>);
|
||||
static_assert(!detail::QuantityKindSpec<frequency_>);
|
||||
|
||||
static_assert(QuantitySpec<decltype(1 / time)>);
|
||||
static_assert(!detail::BaseQuantitySpec<decltype(1 / time)>);
|
||||
static_assert(!detail::NamedQuantitySpec<decltype(1 / time)>);
|
||||
static_assert(detail::IntermediateDerivedQuantitySpec<decltype(1 / time)>);
|
||||
static_assert(!detail::QuantityKindSpec<decltype(1 / time)>);
|
||||
|
||||
static_assert(QuantitySpec<dimensionless_>);
|
||||
static_assert(!detail::BaseQuantitySpec<dimensionless_>);
|
||||
static_assert(detail::NamedQuantitySpec<dimensionless_>);
|
||||
static_assert(!detail::IntermediateDerivedQuantitySpec<dimensionless_>);
|
||||
static_assert(!detail::QuantityKindSpec<dimensionless_>);
|
||||
|
||||
static_assert(QuantitySpec<kind_of_<length>>);
|
||||
static_assert(!detail::BaseQuantitySpec<kind_of_<length>>);
|
||||
static_assert(!detail::NamedQuantitySpec<kind_of_<length>>);
|
||||
static_assert(!detail::IntermediateDerivedQuantitySpec<kind_of_<length>>);
|
||||
static_assert(detail::QuantityKindSpec<kind_of_<length>>);
|
||||
|
||||
static_assert(QuantitySpec<frequency_>);
|
||||
static_assert(!detail::BaseQuantitySpec<frequency_>);
|
||||
static_assert(detail::NamedQuantitySpec<frequency_>);
|
||||
static_assert(!detail::IntermediateDerivedQuantitySpec<frequency_>);
|
||||
static_assert(!detail::QuantityKindSpec<frequency_>);
|
||||
|
||||
static_assert(QuantitySpec<decltype(1 / time)>);
|
||||
static_assert(!detail::BaseQuantitySpec<decltype(1 / time)>);
|
||||
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::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::QuantityKindSpec<decltype(kind_of<length> * kind_of<time>)>);
|
||||
|
||||
// dimensionless
|
||||
static_assert(QuantitySpec<dimensionless_>);
|
||||
static_assert(!detail::BaseQuantitySpec<dimensionless_>);
|
||||
static_assert(detail::NamedQuantitySpec<dimensionless_>);
|
||||
static_assert(!detail::IntermediateDerivedQuantitySpec<dimensionless_>);
|
||||
static_assert(!detail::QuantityKindSpec<dimensionless_>);
|
||||
|
||||
static_assert(QuantitySpec<decltype(length / length)>);
|
||||
static_assert(!detail::BaseQuantitySpec<decltype(length / length)>);
|
||||
static_assert(detail::NamedQuantitySpec<decltype(length / length)>);
|
||||
static_assert(!detail::IntermediateDerivedQuantitySpec<decltype(length / length)>);
|
||||
static_assert(!detail::QuantityKindSpec<decltype(length / length)>);
|
||||
|
||||
static_assert(QuantitySpec<decltype(width / length)>);
|
||||
static_assert(!detail::BaseQuantitySpec<decltype(width / length)>);
|
||||
static_assert(!detail::NamedQuantitySpec<decltype(width / length)>);
|
||||
static_assert(detail::IntermediateDerivedQuantitySpec<decltype(width / length)>);
|
||||
static_assert(!detail::QuantityKindSpec<decltype(width / length)>);
|
||||
|
||||
static_assert(QuantitySpec<decltype(kind_of<length> / kind_of<length>)>);
|
||||
static_assert(!detail::BaseQuantitySpec<decltype(kind_of<length> / kind_of<length>)>);
|
||||
static_assert(!detail::NamedQuantitySpec<decltype(kind_of<length> / kind_of<length>)>);
|
||||
static_assert(!detail::IntermediateDerivedQuantitySpec<decltype(kind_of<length> / kind_of<length>)>);
|
||||
static_assert(detail::QuantityKindSpec<decltype(kind_of<length> / kind_of<length>)>);
|
||||
|
||||
static_assert(QuantitySpec<decltype(kind_of<length> / length)>);
|
||||
static_assert(!detail::BaseQuantitySpec<decltype(kind_of<length> / length)>);
|
||||
static_assert(detail::NamedQuantitySpec<decltype(kind_of<length> / length)>);
|
||||
static_assert(!detail::IntermediateDerivedQuantitySpec<decltype(kind_of<length> / length)>);
|
||||
static_assert(!detail::QuantityKindSpec<decltype(kind_of<length> / length)>);
|
||||
|
||||
static_assert(QuantitySpec<decltype(length / kind_of<length>)>);
|
||||
static_assert(!detail::BaseQuantitySpec<decltype(length / kind_of<length>)>);
|
||||
static_assert(detail::NamedQuantitySpec<decltype(length / kind_of<length>)>);
|
||||
static_assert(!detail::IntermediateDerivedQuantitySpec<decltype(length / kind_of<length>)>);
|
||||
static_assert(!detail::QuantityKindSpec<decltype(length / kind_of<length>)>);
|
||||
|
||||
static_assert(QuantitySpec<decltype(width / kind_of<length>)>);
|
||||
static_assert(!detail::BaseQuantitySpec<decltype(width / kind_of<length>)>);
|
||||
static_assert(!detail::NamedQuantitySpec<decltype(width / kind_of<length>)>);
|
||||
static_assert(detail::IntermediateDerivedQuantitySpec<decltype(width / kind_of<length>)>);
|
||||
static_assert(!detail::QuantityKindSpec<decltype(width / kind_of<length>)>);
|
||||
|
||||
// length
|
||||
static_assert(QuantitySpec<decltype(speed * time)>);
|
||||
static_assert(!detail::BaseQuantitySpec<decltype(speed * time)>);
|
||||
static_assert(!detail::NamedQuantitySpec<decltype(speed * time)>);
|
||||
static_assert(detail::IntermediateDerivedQuantitySpec<decltype(speed * time)>);
|
||||
|
||||
|
Reference in New Issue
Block a user