mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-01 19:34:29 +02:00
feat: 💥 from now on dimnensions have to be marked as final
This commit is contained in:
@@ -60,8 +60,8 @@ For example:
|
|||||||
the following way:
|
the following way:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
inline constexpr struct dim_length : base_dimension<"L"> {} dim_length;
|
inline constexpr struct dim_length final : base_dimension<"L"> {} dim_length;
|
||||||
inline constexpr struct dim_time : base_dimension<"T"> {} dim_time;
|
inline constexpr struct dim_time final : base_dimension<"T"> {} dim_time;
|
||||||
```
|
```
|
||||||
|
|
||||||
[Derived dimensions](../../appendix/glossary.md#derived-dimension) are implicitly created
|
[Derived dimensions](../../appendix/glossary.md#derived-dimension) are implicitly created
|
||||||
|
@@ -33,13 +33,13 @@ and units of derived quantities.
|
|||||||
=== "Dimensions"
|
=== "Dimensions"
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
inline constexpr struct dim_length : base_dimension<"L"> {} dim_length;
|
inline constexpr struct dim_length final : base_dimension<"L"> {} dim_length;
|
||||||
inline constexpr struct dim_mass : base_dimension<"M"> {} dim_mass;
|
inline constexpr struct dim_mass final : base_dimension<"M"> {} dim_mass;
|
||||||
inline constexpr struct dim_time : base_dimension<"T"> {} dim_time;
|
inline constexpr struct dim_time final : base_dimension<"T"> {} dim_time;
|
||||||
inline constexpr struct dim_electric_current : base_dimension<"I"> {} dim_electric_current;
|
inline constexpr struct dim_electric_current final : base_dimension<"I"> {} dim_electric_current;
|
||||||
inline constexpr struct dim_thermodynamic_temperature : base_dimension<{u8"Θ", "O"}> {} dim_thermodynamic_temperature;
|
inline constexpr struct dim_thermodynamic_temperature final : base_dimension<{u8"Θ", "O"}> {} dim_thermodynamic_temperature;
|
||||||
inline constexpr struct dim_amount_of_substance : base_dimension<"N"> {} dim_amount_of_substance;
|
inline constexpr struct dim_amount_of_substance final : base_dimension<"N"> {} dim_amount_of_substance;
|
||||||
inline constexpr struct dim_luminous_intensity : base_dimension<"J"> {} dim_luminous_intensity;
|
inline constexpr struct dim_luminous_intensity final : base_dimension<"J"> {} dim_luminous_intensity;
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "Units"
|
=== "Units"
|
||||||
|
@@ -85,7 +85,7 @@ the `value_cast<U, Rep>(q)` which always returns the most precise result:
|
|||||||
=== "C++23"
|
=== "C++23"
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
inline constexpr struct dim_currency : base_dimension<"$"> {} dim_currency;
|
inline constexpr struct dim_currency final : base_dimension<"$"> {} dim_currency;
|
||||||
inline constexpr struct currency : quantity_spec<dim_currency> {} currency;
|
inline constexpr struct currency : quantity_spec<dim_currency> {} currency;
|
||||||
|
|
||||||
inline constexpr struct us_dollar final : named_unit<"USD", kind_of<currency>> {} us_dollar;
|
inline constexpr struct us_dollar final : named_unit<"USD", kind_of<currency>> {} us_dollar;
|
||||||
@@ -105,7 +105,7 @@ the `value_cast<U, Rep>(q)` which always returns the most precise result:
|
|||||||
=== "C++20"
|
=== "C++20"
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
inline constexpr struct dim_currency : base_dimension<"$"> {} dim_currency;
|
inline constexpr struct dim_currency final : base_dimension<"$"> {} dim_currency;
|
||||||
inline constexpr struct currency : quantity_spec<currency, dim_currency> {} currency;
|
inline constexpr struct currency : quantity_spec<currency, dim_currency> {} currency;
|
||||||
|
|
||||||
inline constexpr struct us_dollar final : named_unit<"USD", kind_of<currency>> {} us_dollar;
|
inline constexpr struct us_dollar final : named_unit<"USD", kind_of<currency>> {} us_dollar;
|
||||||
@@ -125,7 +125,7 @@ the `value_cast<U, Rep>(q)` which always returns the most precise result:
|
|||||||
=== "Portable"
|
=== "Portable"
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
inline constexpr struct dim_currency : base_dimension<"$"> {} dim_currency;
|
inline constexpr struct dim_currency final : base_dimension<"$"> {} dim_currency;
|
||||||
QUANTITY_SPEC(currency, dim_currency);
|
QUANTITY_SPEC(currency, dim_currency);
|
||||||
|
|
||||||
inline constexpr struct us_dollar final : named_unit<"USD", kind_of<currency>> {} us_dollar;
|
inline constexpr struct us_dollar final : named_unit<"USD", kind_of<currency>> {} us_dollar;
|
||||||
|
@@ -36,7 +36,7 @@ import mp_units.core;
|
|||||||
using namespace mp_units;
|
using namespace mp_units;
|
||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
inline constexpr struct dim_currency : base_dimension<"$"> {} dim_currency;
|
inline constexpr struct dim_currency final : base_dimension<"$"> {} dim_currency;
|
||||||
|
|
||||||
QUANTITY_SPEC(currency, dim_currency);
|
QUANTITY_SPEC(currency, dim_currency);
|
||||||
|
|
||||||
|
@@ -62,9 +62,9 @@ namespace mp_units {
|
|||||||
* For example:
|
* For example:
|
||||||
*
|
*
|
||||||
* @code{.cpp}
|
* @code{.cpp}
|
||||||
* inline constexpr struct dim_length : base_dimension<"L"> {} dim_length;
|
* inline constexpr struct dim_length final : base_dimension<"L"> {} dim_length;
|
||||||
* inline constexpr struct dim_time : base_dimension<"T"> {} dim_time;
|
* inline constexpr struct dim_time final : base_dimension<"T"> {} dim_time;
|
||||||
* inline constexpr struct dim_mass : base_dimension<"M"> {} dim_mass;
|
* inline constexpr struct dim_mass final : base_dimension<"M"> {} dim_mass;
|
||||||
* @endcode
|
* @endcode
|
||||||
*
|
*
|
||||||
* @note A common convention in this library is to assign the same name for a type and an object of this type.
|
* @note A common convention in this library is to assign the same name for a type and an object of this type.
|
||||||
@@ -87,6 +87,9 @@ struct base_dimension_less : std::bool_constant<(Lhs::symbol < Rhs::symbol)> {};
|
|||||||
template<typename T1, typename T2>
|
template<typename T1, typename T2>
|
||||||
using type_list_of_base_dimension_less = expr_less<T1, T2, base_dimension_less>;
|
using type_list_of_base_dimension_less = expr_less<T1, T2, base_dimension_less>;
|
||||||
|
|
||||||
|
template<detail::DerivedDimensionExpr... Expr>
|
||||||
|
struct derived_dimension_impl : detail::expr_fractions<detail::is_dimension_one, Expr...> {};
|
||||||
|
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -132,7 +135,7 @@ using type_list_of_base_dimension_less = expr_less<T1, T2, base_dimension_less>;
|
|||||||
* instantiate this type automatically based on the dimensional arithmetic equation provided by the user.
|
* instantiate this type automatically based on the dimensional arithmetic equation provided by the user.
|
||||||
*/
|
*/
|
||||||
template<detail::DerivedDimensionExpr... Expr>
|
template<detail::DerivedDimensionExpr... Expr>
|
||||||
struct derived_dimension : detail::expr_fractions<detail::is_dimension_one, Expr...> {};
|
struct derived_dimension final : detail::derived_dimension_impl<Expr...> {};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Dimension one
|
* @brief Dimension one
|
||||||
@@ -141,7 +144,7 @@ struct derived_dimension : detail::expr_fractions<detail::is_dimension_one, Expr
|
|||||||
* dimensions are zero. It is a dimension of a quantity of dimension one also known as
|
* dimensions are zero. It is a dimension of a quantity of dimension one also known as
|
||||||
* "dimensionless".
|
* "dimensionless".
|
||||||
*/
|
*/
|
||||||
MP_UNITS_EXPORT inline constexpr struct dimension_one : derived_dimension<> {
|
MP_UNITS_EXPORT inline constexpr struct dimension_one final : detail::derived_dimension_impl<> {
|
||||||
} dimension_one;
|
} dimension_one;
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
@@ -280,13 +283,13 @@ constexpr Out dimension_symbol_impl(Out out, const type_list<Nums...>& nums, con
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename CharT, std::output_iterator<CharT> Out, typename... Expr>
|
template<typename CharT, std::output_iterator<CharT> Out, typename... Expr>
|
||||||
constexpr Out dimension_symbol_impl(Out out, const derived_dimension<Expr...>&, const dimension_symbol_formatting& fmt,
|
constexpr Out dimension_symbol_impl(Out out, const derived_dimension_impl<Expr...>&,
|
||||||
bool negative_power)
|
const dimension_symbol_formatting& fmt, bool negative_power)
|
||||||
{
|
{
|
||||||
(void)negative_power;
|
(void)negative_power;
|
||||||
MP_UNITS_EXPECTS(negative_power == false);
|
MP_UNITS_EXPECTS(negative_power == false);
|
||||||
return dimension_symbol_impl<CharT>(out, typename derived_dimension<Expr...>::_num_{},
|
return dimension_symbol_impl<CharT>(out, typename derived_dimension_impl<Expr...>::_num_{},
|
||||||
typename derived_dimension<Expr...>::_den_{}, fmt);
|
typename derived_dimension_impl<Expr...>::_den_{}, fmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -42,20 +42,13 @@ template<typename T>
|
|||||||
inline constexpr bool is_derived_from_specialization_of_base_dimension =
|
inline constexpr bool is_derived_from_specialization_of_base_dimension =
|
||||||
requires(T* t) { to_base_specialization_of_base_dimension(t); };
|
requires(T* t) { to_base_specialization_of_base_dimension(t); };
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
inline constexpr bool is_specialization_of_base_dimension = false;
|
|
||||||
|
|
||||||
template<symbol_text Symbol>
|
|
||||||
inline constexpr bool is_specialization_of_base_dimension<base_dimension<Symbol>> = true;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief A concept matching all named base dimensions in the library.
|
* @brief A concept matching all named base dimensions in the library.
|
||||||
*
|
*
|
||||||
* Satisfied by all dimension types derived from a specialization of `base_dimension`.
|
* Satisfied by all dimension types derived from a specialization of `base_dimension`.
|
||||||
*/
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
concept BaseDimension =
|
concept BaseDimension = is_derived_from_specialization_of_base_dimension<T> && std::is_final_v<T>;
|
||||||
is_derived_from_specialization_of_base_dimension<T> && (!is_specialization_of_base_dimension<T>);
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct is_dimension_one : std::false_type {};
|
struct is_dimension_one : std::false_type {};
|
||||||
@@ -91,7 +84,8 @@ namespace detail {
|
|||||||
* being the `dimension_one`.
|
* being the `dimension_one`.
|
||||||
*/
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
concept DerivedDimension = is_specialization_of<T, derived_dimension> || is_dimension_one<T>::value;
|
concept DerivedDimension =
|
||||||
|
(is_specialization_of<T, derived_dimension> || is_dimension_one<T>::value) && std::is_final_v<T>;
|
||||||
|
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
|
||||||
|
@@ -199,9 +199,9 @@ MP_UNITS_EXPORT_END
|
|||||||
* For example:
|
* For example:
|
||||||
*
|
*
|
||||||
* @code{.cpp}
|
* @code{.cpp}
|
||||||
* inline constexpr struct dim_length : base_dimension<"L"> {} dim_length;
|
* inline constexpr struct dim_length final : base_dimension<"L"> {} dim_length;
|
||||||
* inline constexpr struct dim_mass : base_dimension<"M"> {} dim_mass;
|
* inline constexpr struct dim_mass final : base_dimension<"M"> {} dim_mass;
|
||||||
* inline constexpr struct dim_time : base_dimension<"T"> {} dim_time;
|
* inline constexpr struct dim_time final : base_dimension<"T"> {} dim_time;
|
||||||
*
|
*
|
||||||
* inline constexpr struct length : quantity_spec<dim_length> {} length;
|
* inline constexpr struct length : quantity_spec<dim_length> {} length;
|
||||||
* inline constexpr struct mass : quantity_spec<dim_mass> {} mass;
|
* inline constexpr struct mass : quantity_spec<dim_mass> {} mass;
|
||||||
|
@@ -34,7 +34,7 @@ MP_UNITS_EXPORT
|
|||||||
namespace mp_units::angular {
|
namespace mp_units::angular {
|
||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
inline constexpr struct dim_angle : base_dimension<"A"> {} dim_angle;
|
inline constexpr struct dim_angle final : base_dimension<"A"> {} dim_angle;
|
||||||
QUANTITY_SPEC(angle, dim_angle);
|
QUANTITY_SPEC(angle, dim_angle);
|
||||||
QUANTITY_SPEC(solid_angle, pow<2>(angle));
|
QUANTITY_SPEC(solid_angle, pow<2>(angle));
|
||||||
|
|
||||||
|
@@ -36,7 +36,7 @@ namespace mp_units::iec80000 {
|
|||||||
|
|
||||||
// dimensions of base quantities
|
// dimensions of base quantities
|
||||||
// clang-format off
|
// clang-format off
|
||||||
inline constexpr struct dim_traffic_intensity : base_dimension<"A"> {} dim_traffic_intensity;
|
inline constexpr struct dim_traffic_intensity final : base_dimension<"A"> {} dim_traffic_intensity;
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
// quantities
|
// quantities
|
||||||
|
@@ -35,13 +35,13 @@ namespace mp_units::isq {
|
|||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
// dimensions of base quantities
|
// dimensions of base quantities
|
||||||
inline constexpr struct dim_length : base_dimension<"L"> {} dim_length;
|
inline constexpr struct dim_length final : base_dimension<"L"> {} dim_length;
|
||||||
inline constexpr struct dim_mass : base_dimension<"M"> {} dim_mass;
|
inline constexpr struct dim_mass final : base_dimension<"M"> {} dim_mass;
|
||||||
inline constexpr struct dim_time : base_dimension<"T"> {} dim_time;
|
inline constexpr struct dim_time final : base_dimension<"T"> {} dim_time;
|
||||||
inline constexpr struct dim_electric_current : base_dimension<"I"> {} dim_electric_current;
|
inline constexpr struct dim_electric_current final : base_dimension<"I"> {} dim_electric_current;
|
||||||
inline constexpr struct dim_thermodynamic_temperature : base_dimension<symbol_text{u8"Θ", "O"}> {} dim_thermodynamic_temperature;
|
inline constexpr struct dim_thermodynamic_temperature final : base_dimension<symbol_text{u8"Θ", "O"}> {} dim_thermodynamic_temperature;
|
||||||
inline constexpr struct dim_amount_of_substance : base_dimension<"N"> {} dim_amount_of_substance;
|
inline constexpr struct dim_amount_of_substance final : base_dimension<"N"> {} dim_amount_of_substance;
|
||||||
inline constexpr struct dim_luminous_intensity : base_dimension<"J"> {} dim_luminous_intensity;
|
inline constexpr struct dim_luminous_intensity final : base_dimension<"J"> {} dim_luminous_intensity;
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
// base quantities
|
// base quantities
|
||||||
|
@@ -45,7 +45,7 @@ inline constexpr struct my_origin : absolute_point_origin<my_origin, isq::length
|
|||||||
inline constexpr struct my_relative_origin : relative_point_origin<my_origin + isq::length(42 * si::metre)> {
|
inline constexpr struct my_relative_origin : relative_point_origin<my_origin + isq::length(42 * si::metre)> {
|
||||||
} my_relative_origin;
|
} my_relative_origin;
|
||||||
|
|
||||||
struct dim_speed : decltype(isq::dim_length / isq::dim_time) {};
|
inline constexpr auto dim_speed = isq::dim_length / isq::dim_time;
|
||||||
|
|
||||||
// BaseDimension
|
// BaseDimension
|
||||||
static_assert(detail::BaseDimension<struct isq::dim_length>);
|
static_assert(detail::BaseDimension<struct isq::dim_length>);
|
||||||
@@ -53,7 +53,7 @@ static_assert(!detail::BaseDimension<decltype(isq::dim_length / isq::dim_time)>)
|
|||||||
static_assert(!detail::BaseDimension<decltype(inverse(isq::dim_time))>);
|
static_assert(!detail::BaseDimension<decltype(inverse(isq::dim_time))>);
|
||||||
static_assert(!detail::BaseDimension<decltype(pow<2>(isq::dim_length))>);
|
static_assert(!detail::BaseDimension<decltype(pow<2>(isq::dim_length))>);
|
||||||
static_assert(!detail::BaseDimension<derived_dimension<struct isq::dim_length, per<struct isq::dim_time>>>);
|
static_assert(!detail::BaseDimension<derived_dimension<struct isq::dim_length, per<struct isq::dim_time>>>);
|
||||||
static_assert(!detail::BaseDimension<dim_speed>);
|
static_assert(!detail::BaseDimension<std::remove_const_t<decltype(dim_speed)>>);
|
||||||
static_assert(!detail::BaseDimension<base_dimension<"L">>);
|
static_assert(!detail::BaseDimension<base_dimension<"L">>);
|
||||||
static_assert(!detail::BaseDimension<struct si::metre>);
|
static_assert(!detail::BaseDimension<struct si::metre>);
|
||||||
static_assert(!detail::BaseDimension<int>);
|
static_assert(!detail::BaseDimension<int>);
|
||||||
@@ -64,7 +64,7 @@ static_assert(detail::DerivedDimension<decltype(inverse(isq::dim_time))>);
|
|||||||
static_assert(detail::DerivedDimension<decltype(pow<2>(isq::dim_length))>);
|
static_assert(detail::DerivedDimension<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<derived_dimension<struct isq::dim_length, per<struct isq::dim_time>>>);
|
||||||
static_assert(detail::DerivedDimension<struct dimension_one>);
|
static_assert(detail::DerivedDimension<struct dimension_one>);
|
||||||
static_assert(!detail::DerivedDimension<dim_speed>);
|
static_assert(detail::DerivedDimension<std::remove_const_t<decltype(dim_speed)>>);
|
||||||
static_assert(!detail::DerivedDimension<struct isq::dim_length>);
|
static_assert(!detail::DerivedDimension<struct isq::dim_length>);
|
||||||
static_assert(!detail::DerivedDimension<struct si::metre>);
|
static_assert(!detail::DerivedDimension<struct si::metre>);
|
||||||
static_assert(!detail::DerivedDimension<int>);
|
static_assert(!detail::DerivedDimension<int>);
|
||||||
@@ -76,7 +76,7 @@ static_assert(Dimension<decltype(inverse(isq::dim_time))>);
|
|||||||
static_assert(Dimension<decltype(pow<2>(isq::dim_length))>);
|
static_assert(Dimension<decltype(pow<2>(isq::dim_length))>);
|
||||||
static_assert(Dimension<derived_dimension<struct isq::dim_length, per<struct isq::dim_time>>>);
|
static_assert(Dimension<derived_dimension<struct isq::dim_length, per<struct isq::dim_time>>>);
|
||||||
static_assert(Dimension<struct dimension_one>);
|
static_assert(Dimension<struct dimension_one>);
|
||||||
static_assert(!Dimension<dim_speed>);
|
static_assert(Dimension<std::remove_const_t<decltype(dim_speed)>>);
|
||||||
static_assert(!Dimension<base_dimension<"L">>);
|
static_assert(!Dimension<base_dimension<"L">>);
|
||||||
static_assert(!Dimension<struct si::metre>);
|
static_assert(!Dimension<struct si::metre>);
|
||||||
static_assert(!Dimension<int>);
|
static_assert(!Dimension<int>);
|
||||||
|
@@ -32,12 +32,12 @@ using namespace mp_units;
|
|||||||
using dimension_one_ = struct dimension_one;
|
using dimension_one_ = struct dimension_one;
|
||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
inline constexpr struct length_ : base_dimension<"L"> {} length;
|
inline constexpr struct length_ final : base_dimension<"L"> {} length;
|
||||||
inline constexpr struct mass_ : base_dimension<"M"> {} mass;
|
inline constexpr struct mass_ final : base_dimension<"M"> {} mass;
|
||||||
inline constexpr struct time_ : base_dimension<"T"> {} time;
|
inline constexpr struct time_ final : base_dimension<"T"> {} time;
|
||||||
|
|
||||||
inline constexpr struct my_length1_ : decltype(length) {} my_length1;
|
inline constexpr auto my_length1 = length;
|
||||||
inline constexpr struct my_length2_ : decltype(length) {} my_length2;
|
inline constexpr auto my_length2 = length;
|
||||||
|
|
||||||
QUANTITY_SPEC_(q_time, time);
|
QUANTITY_SPEC_(q_time, time);
|
||||||
inline constexpr struct second_ final : named_unit<"s", kind_of<q_time>> {} second;
|
inline constexpr struct second_ final : named_unit<"s", kind_of<q_time>> {} second;
|
||||||
|
@@ -33,9 +33,9 @@ using dimensionless_ = struct dimensionless;
|
|||||||
using dim_one_ = struct dimension_one;
|
using dim_one_ = struct dimension_one;
|
||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
inline constexpr struct dim_length_ : base_dimension<"L"> {} dim_length;
|
inline constexpr struct dim_length_ final : base_dimension<"L"> {} dim_length;
|
||||||
inline constexpr struct dim_mass_ : base_dimension<"M"> {} dim_mass;
|
inline constexpr struct dim_mass_ final : base_dimension<"M"> {} dim_mass;
|
||||||
inline constexpr struct dim_time_ : base_dimension<"T"> {} dim_time;
|
inline constexpr struct dim_time_ final : base_dimension<"T"> {} dim_time;
|
||||||
|
|
||||||
// quantities specification
|
// quantities specification
|
||||||
QUANTITY_SPEC_(length, dim_length);
|
QUANTITY_SPEC_(length, dim_length);
|
||||||
|
@@ -35,9 +35,9 @@ using one_ = struct one;
|
|||||||
|
|
||||||
// base dimensions
|
// base dimensions
|
||||||
// clang-format off
|
// clang-format off
|
||||||
inline constexpr struct dim_length_ : base_dimension<"L"> {} dim_length;
|
inline constexpr struct dim_length_ final : base_dimension<"L"> {} dim_length;
|
||||||
inline constexpr struct dim_mass_ : base_dimension<"M"> {} dim_mass;
|
inline constexpr struct dim_mass_ final : base_dimension<"M"> {} dim_mass;
|
||||||
inline constexpr struct dim_time_ : base_dimension<"T"> {} dim_time;
|
inline constexpr struct dim_time_ final : base_dimension<"T"> {} dim_time;
|
||||||
|
|
||||||
// quantities specification
|
// quantities specification
|
||||||
QUANTITY_SPEC_(length, dim_length);
|
QUANTITY_SPEC_(length, dim_length);
|
||||||
|
@@ -36,10 +36,10 @@ using percent_ = struct percent;
|
|||||||
|
|
||||||
// base dimensions
|
// base dimensions
|
||||||
// clang-format off
|
// clang-format off
|
||||||
inline constexpr struct dim_length_ : base_dimension<"L"> {} dim_length;
|
inline constexpr struct dim_length_ final : base_dimension<"L"> {} dim_length;
|
||||||
inline constexpr struct dim_mass_ : base_dimension<"M"> {} dim_mass;
|
inline constexpr struct dim_mass_ final : base_dimension<"M"> {} dim_mass;
|
||||||
inline constexpr struct dim_time_ : base_dimension<"T"> {} dim_time;
|
inline constexpr struct dim_time_ final : base_dimension<"T"> {} dim_time;
|
||||||
inline constexpr struct dim_thermodynamic_temperature_ : base_dimension<symbol_text{u8"Θ", "O"}> {} dim_thermodynamic_temperature;
|
inline constexpr struct dim_thermodynamic_temperature_ final : base_dimension<symbol_text{u8"Θ", "O"}> {} dim_thermodynamic_temperature;
|
||||||
|
|
||||||
// quantities specification
|
// quantities specification
|
||||||
QUANTITY_SPEC_(length, dim_length);
|
QUANTITY_SPEC_(length, dim_length);
|
||||||
|
Reference in New Issue
Block a user