forked from mpusz/mp-units
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 =
|
inline constexpr bool is_derived_from_specialization_of_quantity_spec =
|
||||||
requires(T* t) { to_base_specialization_of_quantity_spec(t); };
|
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>
|
template<typename T>
|
||||||
inline constexpr bool is_specialization_of_quantity_spec = false;
|
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> &&
|
concept NamedQuantitySpec = is_derived_from_specialization_of_quantity_spec<T> &&
|
||||||
(!is_specialization_of_quantity_spec<T>)&&(!QuantityKindSpec<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>
|
template<typename T>
|
||||||
struct is_dimensionless : std::false_type {};
|
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<struct isq::dim_length>);
|
||||||
static_assert(!detail::NamedQuantitySpec<int>);
|
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
|
// IntermediateDerivedQuantitySpec
|
||||||
static_assert(!detail::IntermediateDerivedQuantitySpec<struct isq::length>);
|
static_assert(!detail::IntermediateDerivedQuantitySpec<struct isq::length>);
|
||||||
static_assert(!detail::IntermediateDerivedQuantitySpec<struct isq::radius>);
|
static_assert(!detail::IntermediateDerivedQuantitySpec<struct isq::radius>);
|
||||||
|
@@ -88,111 +88,93 @@ QUANTITY_SPEC_(kinetic_energy, mechanical_energy, mass* pow<2>(speed));
|
|||||||
|
|
||||||
// concepts verification
|
// concepts verification
|
||||||
static_assert(QuantitySpec<length_>);
|
static_assert(QuantitySpec<length_>);
|
||||||
static_assert(detail::BaseQuantitySpec<length_>);
|
|
||||||
static_assert(detail::NamedQuantitySpec<length_>);
|
static_assert(detail::NamedQuantitySpec<length_>);
|
||||||
static_assert(!detail::IntermediateDerivedQuantitySpec<length_>);
|
static_assert(!detail::IntermediateDerivedQuantitySpec<length_>);
|
||||||
static_assert(!detail::QuantityKindSpec<length_>);
|
static_assert(!detail::QuantityKindSpec<length_>);
|
||||||
|
|
||||||
static_assert(QuantitySpec<frequency_>);
|
static_assert(QuantitySpec<frequency_>);
|
||||||
static_assert(!detail::BaseQuantitySpec<frequency_>);
|
|
||||||
static_assert(detail::NamedQuantitySpec<frequency_>);
|
static_assert(detail::NamedQuantitySpec<frequency_>);
|
||||||
static_assert(!detail::IntermediateDerivedQuantitySpec<frequency_>);
|
static_assert(!detail::IntermediateDerivedQuantitySpec<frequency_>);
|
||||||
static_assert(!detail::QuantityKindSpec<frequency_>);
|
static_assert(!detail::QuantityKindSpec<frequency_>);
|
||||||
|
|
||||||
static_assert(QuantitySpec<decltype(1 / time)>);
|
static_assert(QuantitySpec<decltype(1 / time)>);
|
||||||
static_assert(!detail::BaseQuantitySpec<decltype(1 / time)>);
|
|
||||||
static_assert(!detail::NamedQuantitySpec<decltype(1 / time)>);
|
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<dimensionless_>);
|
static_assert(QuantitySpec<dimensionless_>);
|
||||||
static_assert(!detail::BaseQuantitySpec<dimensionless_>);
|
|
||||||
static_assert(detail::NamedQuantitySpec<dimensionless_>);
|
static_assert(detail::NamedQuantitySpec<dimensionless_>);
|
||||||
static_assert(!detail::IntermediateDerivedQuantitySpec<dimensionless_>);
|
static_assert(!detail::IntermediateDerivedQuantitySpec<dimensionless_>);
|
||||||
static_assert(!detail::QuantityKindSpec<dimensionless_>);
|
static_assert(!detail::QuantityKindSpec<dimensionless_>);
|
||||||
|
|
||||||
static_assert(QuantitySpec<kind_of_<length>>);
|
static_assert(QuantitySpec<kind_of_<length>>);
|
||||||
static_assert(!detail::BaseQuantitySpec<kind_of_<length>>);
|
|
||||||
static_assert(!detail::NamedQuantitySpec<kind_of_<length>>);
|
static_assert(!detail::NamedQuantitySpec<kind_of_<length>>);
|
||||||
static_assert(!detail::IntermediateDerivedQuantitySpec<kind_of_<length>>);
|
static_assert(!detail::IntermediateDerivedQuantitySpec<kind_of_<length>>);
|
||||||
static_assert(detail::QuantityKindSpec<kind_of_<length>>);
|
static_assert(detail::QuantityKindSpec<kind_of_<length>>);
|
||||||
|
|
||||||
static_assert(QuantitySpec<frequency_>);
|
static_assert(QuantitySpec<frequency_>);
|
||||||
static_assert(!detail::BaseQuantitySpec<frequency_>);
|
|
||||||
static_assert(detail::NamedQuantitySpec<frequency_>);
|
static_assert(detail::NamedQuantitySpec<frequency_>);
|
||||||
static_assert(!detail::IntermediateDerivedQuantitySpec<frequency_>);
|
static_assert(!detail::IntermediateDerivedQuantitySpec<frequency_>);
|
||||||
static_assert(!detail::QuantityKindSpec<frequency_>);
|
static_assert(!detail::QuantityKindSpec<frequency_>);
|
||||||
|
|
||||||
static_assert(QuantitySpec<decltype(1 / time)>);
|
static_assert(QuantitySpec<decltype(1 / time)>);
|
||||||
static_assert(!detail::BaseQuantitySpec<decltype(1 / time)>);
|
|
||||||
static_assert(!detail::NamedQuantitySpec<decltype(1 / time)>);
|
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(QuantitySpec<kind_of_<length / time>>);
|
||||||
static_assert(!detail::BaseQuantitySpec<kind_of_<length / time>>);
|
|
||||||
static_assert(!detail::NamedQuantitySpec<kind_of_<length / time>>);
|
static_assert(!detail::NamedQuantitySpec<kind_of_<length / time>>);
|
||||||
static_assert(detail::IntermediateDerivedQuantitySpec<kind_of_<length / time>>);
|
static_assert(detail::IntermediateDerivedQuantitySpec<kind_of_<length / time>>);
|
||||||
static_assert(detail::QuantityKindSpec<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::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::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
|
||||||
static_assert(QuantitySpec<dimensionless_>);
|
static_assert(QuantitySpec<dimensionless_>);
|
||||||
static_assert(!detail::BaseQuantitySpec<dimensionless_>);
|
|
||||||
static_assert(detail::NamedQuantitySpec<dimensionless_>);
|
static_assert(detail::NamedQuantitySpec<dimensionless_>);
|
||||||
static_assert(!detail::IntermediateDerivedQuantitySpec<dimensionless_>);
|
static_assert(!detail::IntermediateDerivedQuantitySpec<dimensionless_>);
|
||||||
static_assert(!detail::QuantityKindSpec<dimensionless_>);
|
static_assert(!detail::QuantityKindSpec<dimensionless_>);
|
||||||
|
|
||||||
static_assert(QuantitySpec<decltype(length / length)>);
|
static_assert(QuantitySpec<decltype(length / length)>);
|
||||||
static_assert(!detail::BaseQuantitySpec<decltype(length / length)>);
|
|
||||||
static_assert(detail::NamedQuantitySpec<decltype(length / length)>);
|
static_assert(detail::NamedQuantitySpec<decltype(length / length)>);
|
||||||
static_assert(!detail::IntermediateDerivedQuantitySpec<decltype(length / length)>);
|
static_assert(!detail::IntermediateDerivedQuantitySpec<decltype(length / length)>);
|
||||||
static_assert(!detail::QuantityKindSpec<decltype(length / length)>);
|
static_assert(!detail::QuantityKindSpec<decltype(length / length)>);
|
||||||
|
|
||||||
static_assert(QuantitySpec<decltype(width / length)>);
|
static_assert(QuantitySpec<decltype(width / length)>);
|
||||||
static_assert(!detail::BaseQuantitySpec<decltype(width / length)>);
|
|
||||||
static_assert(!detail::NamedQuantitySpec<decltype(width / length)>);
|
static_assert(!detail::NamedQuantitySpec<decltype(width / length)>);
|
||||||
static_assert(detail::IntermediateDerivedQuantitySpec<decltype(width / length)>);
|
static_assert(detail::IntermediateDerivedQuantitySpec<decltype(width / length)>);
|
||||||
static_assert(!detail::QuantityKindSpec<decltype(width / length)>);
|
static_assert(!detail::QuantityKindSpec<decltype(width / length)>);
|
||||||
|
|
||||||
static_assert(QuantitySpec<decltype(kind_of<length> / kind_of<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::NamedQuantitySpec<decltype(kind_of<length> / kind_of<length>)>);
|
||||||
static_assert(!detail::IntermediateDerivedQuantitySpec<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(detail::QuantityKindSpec<decltype(kind_of<length> / kind_of<length>)>);
|
||||||
|
|
||||||
static_assert(QuantitySpec<decltype(kind_of<length> / 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::NamedQuantitySpec<decltype(kind_of<length> / length)>);
|
||||||
static_assert(!detail::IntermediateDerivedQuantitySpec<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(!detail::QuantityKindSpec<decltype(kind_of<length> / length)>);
|
||||||
|
|
||||||
static_assert(QuantitySpec<decltype(length / kind_of<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::NamedQuantitySpec<decltype(length / kind_of<length>)>);
|
||||||
static_assert(!detail::IntermediateDerivedQuantitySpec<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(!detail::QuantityKindSpec<decltype(length / kind_of<length>)>);
|
||||||
|
|
||||||
static_assert(QuantitySpec<decltype(width / 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::NamedQuantitySpec<decltype(width / kind_of<length>)>);
|
||||||
static_assert(detail::IntermediateDerivedQuantitySpec<decltype(width / kind_of<length>)>);
|
static_assert(detail::IntermediateDerivedQuantitySpec<decltype(width / kind_of<length>)>);
|
||||||
static_assert(!detail::QuantityKindSpec<decltype(width / kind_of<length>)>);
|
static_assert(!detail::QuantityKindSpec<decltype(width / kind_of<length>)>);
|
||||||
|
|
||||||
// length
|
// length
|
||||||
static_assert(QuantitySpec<decltype(speed * time)>);
|
static_assert(QuantitySpec<decltype(speed * time)>);
|
||||||
static_assert(!detail::BaseQuantitySpec<decltype(speed * time)>);
|
|
||||||
static_assert(!detail::NamedQuantitySpec<decltype(speed * time)>);
|
static_assert(!detail::NamedQuantitySpec<decltype(speed * time)>);
|
||||||
static_assert(detail::IntermediateDerivedQuantitySpec<decltype(speed * time)>);
|
static_assert(detail::IntermediateDerivedQuantitySpec<decltype(speed * time)>);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user