From 9a520edfe9c15374cf07055b018f2292f85f587e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johel=20Ernesto=20Guerrero=20Pe=C3=B1a?= Date: Wed, 17 Mar 2021 15:20:07 -0400 Subject: [PATCH] refactor!: replace one_rep with reference --- cmake/warnings.cmake | 1 - example/glide_computer_example.cpp | 3 + src/core/include/units/bits/basic_concepts.h | 16 +++ src/core/include/units/bits/external/hacks.h | 4 + src/core/include/units/generic/angle.h | 7 +- src/core/include/units/one_rep.h | 124 ------------------ src/core/include/units/quantity.h | 60 ++++++--- src/core/include/units/quantity_kind.h | 13 +- src/core/include/units/reference.h | 108 +++++++++++++++ src/systems/data/include/units/data/bitrate.h | 12 +- .../data/include/units/data/information.h | 26 ++-- .../include/units/isq/si/cgs/acceleration.h | 2 +- .../si-cgs/include/units/isq/si/cgs/area.h | 2 +- .../si-cgs/include/units/isq/si/cgs/energy.h | 2 +- .../si-cgs/include/units/isq/si/cgs/force.h | 2 +- .../si-cgs/include/units/isq/si/cgs/length.h | 2 +- .../si-cgs/include/units/isq/si/cgs/mass.h | 2 +- .../include/units/isq/si/cgs/pressure.h | 2 +- .../si-fps/include/units/isq/si/fps/area.h | 2 +- .../si-fps/include/units/isq/si/fps/energy.h | 4 +- .../si-fps/include/units/isq/si/fps/force.h | 6 +- .../si-fps/include/units/isq/si/fps/length.h | 16 +-- .../si-fps/include/units/isq/si/fps/mass.h | 18 +-- .../si-fps/include/units/isq/si/fps/power.h | 2 +- .../include/units/isq/si/fps/pressure.h | 4 +- .../si-fps/include/units/isq/si/fps/speed.h | 4 +- .../si-fps/include/units/isq/si/fps/volume.h | 4 +- .../si-iau/include/units/isq/si/iau/length.h | 6 +- .../include/units/isq/si/imperial/length.h | 4 +- .../include/units/isq/si/international/area.h | 2 +- .../units/isq/si/international/length.h | 16 +-- .../units/isq/si/international/volume.h | 2 +- .../include/units/isq/si/typographic/length.h | 8 +- .../si-us/include/units/isq/si/us/length.h | 6 +- .../si/include/units/isq/si/absorbed_dose.h | 42 +++--- .../units/isq/si/amount_of_substance.h | 4 +- src/systems/si/include/units/isq/si/area.h | 44 +++---- .../si/include/units/isq/si/capacitance.h | 42 +++--- .../include/units/isq/si/catalytic_activity.h | 44 +++---- .../si/include/units/isq/si/conductance.h | 34 ++--- .../include/units/isq/si/dynamic_viscosity.h | 2 +- .../si/include/units/isq/si/electric_charge.h | 2 +- .../include/units/isq/si/electric_current.h | 44 +++---- src/systems/si/include/units/isq/si/energy.h | 38 +++--- src/systems/si/include/units/isq/si/force.h | 42 +++--- .../si/include/units/isq/si/frequency.h | 34 ++--- .../si/include/units/isq/si/inductance.h | 34 ++--- src/systems/si/include/units/isq/si/length.h | 46 +++---- .../include/units/isq/si/luminous_intensity.h | 44 +++---- .../si/include/units/isq/si/magnetic_flux.h | 34 ++--- .../include/units/isq/si/magnetic_induction.h | 36 ++--- src/systems/si/include/units/isq/si/mass.h | 88 ++++++------- src/systems/si/include/units/isq/si/power.h | 34 ++--- .../si/include/units/isq/si/pressure.h | 42 +++--- .../si/include/units/isq/si/radioactivity.h | 42 +++--- .../si/include/units/isq/si/resistance.h | 34 ++--- .../units/isq/si/thermodynamic_temperature.h | 4 +- src/systems/si/include/units/isq/si/time.h | 26 ++-- src/systems/si/include/units/isq/si/torque.h | 2 +- src/systems/si/include/units/isq/si/voltage.h | 42 +++--- src/systems/si/include/units/isq/si/volume.h | 84 ++++++------ test/unit_test/static/quantity_kind_test.cpp | 17 ++- .../static/quantity_point_kind_test.cpp | 5 - test/unit_test/static/quantity_test.cpp | 23 ++++ test/unit_test/static/unit_constants.cpp | 18 ++- 65 files changed, 798 insertions(+), 721 deletions(-) delete mode 100644 src/core/include/units/one_rep.h create mode 100644 src/core/include/units/reference.h diff --git a/cmake/warnings.cmake b/cmake/warnings.cmake index 92c3f7c5..ca8018b8 100644 --- a/cmake/warnings.cmake +++ b/cmake/warnings.cmake @@ -72,7 +72,6 @@ macro(_set_flags) set(CLANG_WARNINGS ${GCC_COMMON_WARNINGS} - -Wno-missing-braces ) set(GCC_WARNINGS diff --git a/example/glide_computer_example.cpp b/example/glide_computer_example.cpp index e48951ce..46533ab9 100644 --- a/example/glide_computer_example.cpp +++ b/example/glide_computer_example.cpp @@ -32,11 +32,14 @@ using namespace glide_computer; auto get_gliders() { using namespace si::unit_constants; +UNITS_DIAGNOSTIC_PUSH +UNITS_DIAGNOSTIC_IGNORE_MISSING_BRACES static const std::array gliders = { glider{"SZD-30 Pirat", {velocity(83 * km / h), rate_of_climb(-0.7389 * m / s)}}, glider{"SZD-51 Junior", {velocity(80 * km / h), rate_of_climb(-0.6349 * m / s)}}, glider{"SZD-48 Jantar Std 3", {velocity(110 * km / h), rate_of_climb(-0.77355 * m / s)}}, glider{"SZD-56 Diana", {velocity(110 * km / h), rate_of_climb(-0.63657 * m / s)}}}; +UNITS_DIAGNOSTIC_POP return gliders; } diff --git a/src/core/include/units/bits/basic_concepts.h b/src/core/include/units/bits/basic_concepts.h index 1dfb4f32..6e9bada5 100644 --- a/src/core/include/units/bits/basic_concepts.h +++ b/src/core/include/units/bits/basic_concepts.h @@ -246,6 +246,22 @@ struct _point_kind_base; template concept PointKind = kind_impl_; +// Reference +namespace detail { + +template +inline constexpr bool is_reference = false; + +} // namespace detail + +/** + * @brief A concept matching all references in the library. + * + * Satisfied by all specializations of @c reference. + */ +template +concept Reference = detail::is_reference; + // Quantity, QuantityPoint, QuantityKind, QuantityPointKind namespace detail { diff --git a/src/core/include/units/bits/external/hacks.h b/src/core/include/units/bits/external/hacks.h index d72df2bf..2129916a 100644 --- a/src/core/include/units/bits/external/hacks.h +++ b/src/core/include/units/bits/external/hacks.h @@ -42,13 +42,17 @@ UNITS_PRAGMA(GCC diagnostic ignored "-Wunknown-pragmas") \ UNITS_PRAGMA(GCC diagnostic ignored "-Wunknown-warning-option") \ UNITS_PRAGMA(GCC diagnostic ignored X) +#define UNITS_DIAGNOSTIC_IGNORE_MISSING_BRACES UNITS_DIAGNOSTIC_IGNORE("-Wmissing-braces") #define UNITS_DIAGNOSTIC_IGNORE_NON_TEMPLATE_FRIEND UNITS_DIAGNOSTIC_IGNORE("-Wnon-template-friend") +#define UNITS_DIAGNOSTIC_IGNORE_SHADOW UNITS_DIAGNOSTIC_IGNORE("-Wshadow") #else #define UNITS_DIAGNOSTIC_PUSH UNITS_PRAGMA(warning(push)) #define UNITS_DIAGNOSTIC_POP UNITS_PRAGMA(warning(pop)) #define UNITS_DIAGNOSTIC_IGNORE_PRAGMAS UNITS_PRAGMA(warning(disable : 4068)) #define UNITS_DIAGNOSTIC_IGNORE(X) UNITS_DIAGNOSTIC_IGNORE_PRAGMAS UNITS_PRAGMA(warning(disable : X)) +#define UNITS_DIAGNOSTIC_IGNORE_MISSING_BRACES #define UNITS_DIAGNOSTIC_IGNORE_NON_TEMPLATE_FRIEND +#define UNITS_DIAGNOSTIC_IGNORE_SHADOW #endif #if UNITS_COMP_CLANG diff --git a/src/core/include/units/generic/angle.h b/src/core/include/units/generic/angle.h index f9a393b6..2bc549b7 100644 --- a/src/core/include/units/generic/angle.h +++ b/src/core/include/units/generic/angle.h @@ -44,7 +44,12 @@ inline namespace literals { constexpr auto operator"" _q_rad(unsigned long long l) { gsl_ExpectsAudit(std::in_range(l)); return angle(static_cast(l)); } constexpr auto operator"" _q_rad(long double l) { return angle(l); } - } // namespace literals +inline namespace unit_constants { + +inline constexpr auto rad = reference, radian>{}; + +} // namespace unit_constants + } // namespace units diff --git a/src/core/include/units/one_rep.h b/src/core/include/units/one_rep.h deleted file mode 100644 index 326864e9..00000000 --- a/src/core/include/units/one_rep.h +++ /dev/null @@ -1,124 +0,0 @@ -// The MIT License (MIT) -// -// Copyright (c) 2018 Mateusz Pusz -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -#pragma once - -#include -#include -#include - -namespace units { - -struct invalid_one_rep {}; - -/** - * @brief A representation type to be used for unit constants - * - * This representation type is intended to be used in the unit constants definition: - * - * @code{.cpp} - * namespace unit_constants { - * - * inline constexpr auto m = length{}; - * inline constexpr auto km = length{}; - * - * } - * @endcode - * - * Unit constants simplify quantity creation: - * - * @code{.cpp} - * using namespace units::isq::si::unit_constants; - * - * auto d = 123 * m; - * auto v = 70 * km / h; - * @endcode - * - * Also, it is allowed to define custom unit constants from existing ones: - * - * @code{.cpp} - * constexpr auto Nm = N * m; - * constexpr auto mph = mi / h; - * @endcode - * - * `km * 3` or `s / 4` syntax is not allowed for quantity creation. - */ -struct one_rep { - [[nodiscard]] friend constexpr one_rep operator*(one_rep, one_rep) { return {}; } - [[nodiscard]] friend constexpr one_rep operator/(one_rep, one_rep) { return {}; } - - template - [[nodiscard]] friend constexpr Rep operator*(const Rep& lhs, one_rep) - { - return lhs; - } - template - [[nodiscard]] friend constexpr Rep operator/(const Rep& lhs, one_rep) - { - return lhs; - } - - template - [[nodiscard]] friend constexpr Rep operator*(one_rep, const Rep&) = delete; - template - [[nodiscard]] friend constexpr Rep operator/(one_rep, const Rep&) = delete; - - template - requires requires { quantity_values::one(); } && - (!Quantity && !QuantityLike && !wrapped_quantity_) // TODO: Replace with `QuantityValue` - [[nodiscard]] constexpr operator Rep() const noexcept // when Clang catches up. - { - return quantity_values::one(); - } - - [[nodiscard]] bool operator==(const one_rep&) const = default; - [[nodiscard]] auto operator<=>(const one_rep&) const = default; - - [[nodiscard]] constexpr bool operator==(const invalid_one_rep&) const { return false; } -}; - -template<> -struct quantity_values { - static constexpr invalid_one_rep zero() noexcept { return invalid_one_rep{}; } - static constexpr one_rep one() noexcept { return one_rep{}; } - static constexpr one_rep min() noexcept { return one(); } - static constexpr one_rep max() noexcept { return one(); } -}; - -} // namespace units - -namespace std { - -template<> -struct common_type { - using type = units::one_rep; -}; -template -struct common_type { - using type = Rep; -}; -template -struct common_type { - using type = Rep; -}; - -} // namespace std diff --git a/src/core/include/units/quantity.h b/src/core/include/units/quantity.h index 961bd549..fc100ab6 100644 --- a/src/core/include/units/quantity.h +++ b/src/core/include/units/quantity.h @@ -24,15 +24,26 @@ #pragma once #include -#include #include #include #include #include +#include #include +#include namespace units { +namespace detail { + +template // Replace with `v * R{}` pending https://github.com/BobSteagall/wg21/issues/58. +inline constexpr auto make_quantity = [](auto v) { + using Rep = decltype(v); + return quantity(std::move(v)); +}; + +} // namespace detail + template concept floating_point_ = // exposition only (Quantity && treat_as_floating_point) || @@ -98,6 +109,7 @@ class quantity { Rep value_; public: // member types + using reference = units::reference; using dimension = D; using unit = U; using rep = Rep; @@ -392,25 +404,41 @@ template Q2> return ret(ret(lhs).count() - ret(rhs).count()); } -template - requires quantity_value_for_, Rep1, Rep2> -[[nodiscard]] constexpr Quantity auto operator*(const quantity& lhs, const quantity& rhs) +template + requires Quantity || QuantityValue +[[nodiscard]] constexpr Quantity auto operator*(const QuantityOrQuantityValue& lhs, reference) { - using dim = dimension_multiply; - using unit = downcast_unit::ratio) * (U2::ratio / dimension_unit::ratio) * dimension_unit::ratio>; - using ret = quantity, Rep1, Rep2>>; - return ret(lhs.count() * rhs.count()); + if constexpr (Quantity) + return lhs * quantity::one(); + else + return quantity(lhs); } -template - requires quantity_value_for_, Rep1, Rep2> -[[nodiscard]] constexpr Quantity auto operator/(const quantity& lhs, const quantity& rhs) +template + requires quantity_value_for_, typename Q1::rep, typename Q2::rep> +[[nodiscard]] constexpr Quantity auto operator*(const Q1& lhs, const Q2& rhs) { - gsl_ExpectsAudit(rhs.count() != quantity_values::zero()); - using dim = dimension_divide; - using unit = downcast_unit::ratio) / (U2::ratio / dimension_unit::ratio) * dimension_unit::ratio>; - using ret = quantity, Rep1, Rep2>>; - return ret(lhs.count() / rhs.count()); + return detail::make_quantity>( + lhs.count() * rhs.count()); +} + +template + requires Quantity || QuantityValue +[[nodiscard]] constexpr Quantity auto operator/(const QuantityOrQuantityValue& lhs, reference) +{ + if constexpr (Quantity) + return lhs / quantity::one(); + else + return lhs / quantity::one(); +} + +template + requires quantity_value_for_, typename Q1::rep, typename Q2::rep> +[[nodiscard]] constexpr Quantity auto operator/(const Q1& lhs, const Q2& rhs) +{ + gsl_ExpectsAudit(rhs.count() != quantity_values::zero()); + return detail::make_quantity>( + lhs.count() / rhs.count()); } template diff --git a/src/core/include/units/quantity_kind.h b/src/core/include/units/quantity_kind.h index 874a0552..868c4a3a 100644 --- a/src/core/include/units/quantity_kind.h +++ b/src/core/include/units/quantity_kind.h @@ -300,8 +300,9 @@ template QK2> return detail::make_quantity_kind(lhs.common() - rhs.common()); } -template -[[nodiscard]] constexpr QuantityKind auto operator*(const QK& lhs, const Q& rhs) +template + requires Quantity || Reference +[[nodiscard]] constexpr QuantityKind auto operator*(const QK& lhs, const QuantityOrReference& rhs) requires requires { lhs.common() * rhs; } { return detail::downcasted_kind(lhs.common() * rhs); @@ -321,11 +322,13 @@ template QK2> return detail::downcasted_kind(lhs.common() * rhs.common()); } -template -[[nodiscard]] constexpr QuantityKind auto operator/(const QK& lhs, const Q& rhs) +template + requires Quantity || Reference +[[nodiscard]] constexpr QuantityKind auto operator/(const QK& lhs, const QuantityOrReference& rhs) requires requires { lhs.common() / rhs; } { - gsl_ExpectsAudit(rhs.count() != quantity_values::zero()); + if constexpr (Quantity) + gsl_ExpectsAudit(rhs.count() != quantity_values::zero()); return detail::downcasted_kind(lhs.common() / rhs); } diff --git a/src/core/include/units/reference.h b/src/core/include/units/reference.h new file mode 100644 index 00000000..e316d41a --- /dev/null +++ b/src/core/include/units/reference.h @@ -0,0 +1,108 @@ +// The MIT License (MIT) +// +// Copyright (c) 2018 Mateusz Pusz +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#pragma once + +#include +#include + +namespace units { + +/** + * @brief The type for unit constants + * + * This type is intended to be used in the unit constants definition: + * + * @code{.cpp} + * namespace unit_constants { + * + * inline constexpr auto m = reference{}; + * inline constexpr auto km = reference{}; + * + * } + * @endcode + * + * Unit constants simplify quantity creation: + * + * @code{.cpp} + * using namespace units::isq::si::unit_constants; + * + * auto d = 123 * m; + * auto v = 70 * km / h; + * @endcode + * + * Also, it is allowed to define custom unit constants from existing ones: + * + * @code{.cpp} + * constexpr auto Nm = N * m; + * constexpr auto mph = mi / h; + * @endcode + * + * `km * 3` or `s / 4` syntax is not allowed for quantity creation. + */ +template U> +struct reference { + using dimension = D; + using unit = U; +}; + +namespace detail { + +template +using reference_multiply_impl = reference::ratio) * (U2::ratio / dimension_unit::ratio) * dimension_unit::ratio>>; + +} // namespace detail + +template +using reference_multiply = detail::reference_multiply_impl< + dimension_multiply, + typename R1::dimension, typename R1::unit, typename R2::dimension, typename R2::unit>; + +template +[[nodiscard]] constexpr reference_multiply operator*(R1, R2) { return {}; } + +namespace detail { + +template +using reference_divide_impl = reference::ratio) / (U2::ratio / dimension_unit::ratio) * dimension_unit::ratio>>; + +} // namespace detail + +template +using reference_divide = detail::reference_divide_impl< + dimension_divide, + typename R1::dimension, typename R1::unit, typename R2::dimension, typename R2::unit>; + +template +[[nodiscard]] constexpr reference_divide operator/(R1, R2) { return {}; } + +// type traits +namespace detail { + +template +inline constexpr bool is_reference> = true; + +} // namespace detail + +} // namespace units diff --git a/src/systems/data/include/units/data/bitrate.h b/src/systems/data/include/units/data/bitrate.h index 4ebd8cf8..7338bb9a 100644 --- a/src/systems/data/include/units/data/bitrate.h +++ b/src/systems/data/include/units/data/bitrate.h @@ -58,12 +58,12 @@ constexpr auto operator"" _q_Pib_per_s(unsigned long long l) { gsl_ExpectsAudit( namespace unit_constants { -inline constexpr auto b_per_s = bitrate{}; -inline constexpr auto Kib_per_s = bitrate{}; -inline constexpr auto Mib_per_s = bitrate{}; -inline constexpr auto Gib_per_s = bitrate{}; -inline constexpr auto Tib_per_s = bitrate{}; -inline constexpr auto Pib_per_s = bitrate{}; +inline constexpr auto b_per_s = reference{}; +inline constexpr auto Kib_per_s = reference{}; +inline constexpr auto Mib_per_s = reference{}; +inline constexpr auto Gib_per_s = reference{}; +inline constexpr auto Tib_per_s = reference{}; +inline constexpr auto Pib_per_s = reference{}; } // namespace unit_constants diff --git a/src/systems/data/include/units/data/information.h b/src/systems/data/include/units/data/information.h index eaba95ee..eda46486 100644 --- a/src/systems/data/include/units/data/information.h +++ b/src/systems/data/include/units/data/information.h @@ -22,7 +22,7 @@ #pragma once -#include +#include #include #include #include @@ -74,19 +74,19 @@ constexpr auto operator"" _q_PiB(unsigned long long l) { gsl_ExpectsAudit(std::i namespace unit_constants { -inline constexpr auto b = information{}; -inline constexpr auto Kib = information{}; -inline constexpr auto Mib = information{}; -inline constexpr auto Gib = information{}; -inline constexpr auto Tib = information{}; -inline constexpr auto Pib = information{}; +inline constexpr auto b = reference{}; +inline constexpr auto Kib = reference{}; +inline constexpr auto Mib = reference{}; +inline constexpr auto Gib = reference{}; +inline constexpr auto Tib = reference{}; +inline constexpr auto Pib = reference{}; -inline constexpr auto B = information{}; -inline constexpr auto KiB = information{}; -inline constexpr auto MiB = information{}; -inline constexpr auto GiB = information{}; -inline constexpr auto TiB = information{}; -inline constexpr auto PiB = information{}; +inline constexpr auto B = reference{}; +inline constexpr auto KiB = reference{}; +inline constexpr auto MiB = reference{}; +inline constexpr auto GiB = reference{}; +inline constexpr auto TiB = reference{}; +inline constexpr auto PiB = reference{}; } // namespace unit_constants diff --git a/src/systems/si-cgs/include/units/isq/si/cgs/acceleration.h b/src/systems/si-cgs/include/units/isq/si/cgs/acceleration.h index a0e2313a..ac9f63ab 100644 --- a/src/systems/si-cgs/include/units/isq/si/cgs/acceleration.h +++ b/src/systems/si-cgs/include/units/isq/si/cgs/acceleration.h @@ -44,7 +44,7 @@ constexpr auto operator"" _q_Gal(long double l) { return acceleration{}; +inline constexpr auto Gal = reference{}; } // namespace unit_constants diff --git a/src/systems/si-cgs/include/units/isq/si/cgs/area.h b/src/systems/si-cgs/include/units/isq/si/cgs/area.h index 39cdd645..a92cd921 100644 --- a/src/systems/si-cgs/include/units/isq/si/cgs/area.h +++ b/src/systems/si-cgs/include/units/isq/si/cgs/area.h @@ -45,7 +45,7 @@ constexpr auto operator"" _q_cm2(long double l) { return area{}; +inline constexpr auto cm2 = reference{}; } // namespace unit_constants diff --git a/src/systems/si-cgs/include/units/isq/si/cgs/energy.h b/src/systems/si-cgs/include/units/isq/si/cgs/energy.h index 8141a945..b877cbc9 100644 --- a/src/systems/si-cgs/include/units/isq/si/cgs/energy.h +++ b/src/systems/si-cgs/include/units/isq/si/cgs/energy.h @@ -46,7 +46,7 @@ constexpr auto operator"" _q_erg(long double l) { return energy{}; +inline constexpr auto erg = reference{}; } // namespace unit_constants diff --git a/src/systems/si-cgs/include/units/isq/si/cgs/force.h b/src/systems/si-cgs/include/units/isq/si/cgs/force.h index ac605e1f..43359c39 100644 --- a/src/systems/si-cgs/include/units/isq/si/cgs/force.h +++ b/src/systems/si-cgs/include/units/isq/si/cgs/force.h @@ -47,7 +47,7 @@ constexpr auto operator"" _q_dyn(long double l) { return force{}; +inline constexpr auto dyn = reference{}; } // namespace unit_constants diff --git a/src/systems/si-cgs/include/units/isq/si/cgs/length.h b/src/systems/si-cgs/include/units/isq/si/cgs/length.h index 633f2867..36e17615 100644 --- a/src/systems/si-cgs/include/units/isq/si/cgs/length.h +++ b/src/systems/si-cgs/include/units/isq/si/cgs/length.h @@ -44,7 +44,7 @@ constexpr auto operator"" _q_cm(long double l) { return length{}; +inline constexpr auto cm = reference{}; } // namespace unit_constants diff --git a/src/systems/si-cgs/include/units/isq/si/cgs/mass.h b/src/systems/si-cgs/include/units/isq/si/cgs/mass.h index 05aa2fc7..a69f9fb1 100644 --- a/src/systems/si-cgs/include/units/isq/si/cgs/mass.h +++ b/src/systems/si-cgs/include/units/isq/si/cgs/mass.h @@ -44,7 +44,7 @@ constexpr auto operator"" _q_g(long double l) { return mass(l namespace unit_constants { -inline constexpr auto g = mass{}; +inline constexpr auto g = reference{}; } // namespace unit_constants diff --git a/src/systems/si-cgs/include/units/isq/si/cgs/pressure.h b/src/systems/si-cgs/include/units/isq/si/cgs/pressure.h index 37ebf77e..f2f8ed9d 100644 --- a/src/systems/si-cgs/include/units/isq/si/cgs/pressure.h +++ b/src/systems/si-cgs/include/units/isq/si/cgs/pressure.h @@ -47,7 +47,7 @@ constexpr auto operator"" _q_Ba(long double l) { return pressure{}; +inline constexpr auto Ba = reference{}; } // namespace unit_constants diff --git a/src/systems/si-fps/include/units/isq/si/fps/area.h b/src/systems/si-fps/include/units/isq/si/fps/area.h index 34a75283..082131fb 100644 --- a/src/systems/si-fps/include/units/isq/si/fps/area.h +++ b/src/systems/si-fps/include/units/isq/si/fps/area.h @@ -45,7 +45,7 @@ constexpr auto operator"" _q_ft2(long double l) { return area{}; +inline constexpr auto ft2 = reference{}; } // namespace unit_constants diff --git a/src/systems/si-fps/include/units/isq/si/fps/energy.h b/src/systems/si-fps/include/units/isq/si/fps/energy.h index d1a406b0..136c5d10 100644 --- a/src/systems/si-fps/include/units/isq/si/fps/energy.h +++ b/src/systems/si-fps/include/units/isq/si/fps/energy.h @@ -57,8 +57,8 @@ constexpr auto operator"" _q_ft_lbf(long double l) { return energy{}; -inline constexpr auto ft_lbf = energy{}; +inline constexpr auto ft_pdl = reference{}; +inline constexpr auto ft_lbf = reference{}; } // namespace unit_constants diff --git a/src/systems/si-fps/include/units/isq/si/fps/force.h b/src/systems/si-fps/include/units/isq/si/fps/force.h index cf2cb87b..51af09c4 100644 --- a/src/systems/si-fps/include/units/isq/si/fps/force.h +++ b/src/systems/si-fps/include/units/isq/si/fps/force.h @@ -64,9 +64,9 @@ constexpr auto operator"" _q_klbf(long double l) { return force{}; -inline constexpr auto lbf = force{}; -inline constexpr auto klbf = force{}; +inline constexpr auto pdl = reference{}; +inline constexpr auto lbf = reference{}; +inline constexpr auto klbf = reference{}; } // namespace unit_constants diff --git a/src/systems/si-fps/include/units/isq/si/fps/length.h b/src/systems/si-fps/include/units/isq/si/fps/length.h index 3aa57dd3..e474fb12 100644 --- a/src/systems/si-fps/include/units/isq/si/fps/length.h +++ b/src/systems/si-fps/include/units/isq/si/fps/length.h @@ -95,16 +95,16 @@ constexpr auto operator"" _q_naut_mi(long double l) { return length{}; +inline constexpr auto thou = reference{}; inline constexpr auto mil = thou; -inline constexpr auto in = length{}; -inline constexpr auto ft = length{}; -inline constexpr auto yd = length{}; -inline constexpr auto ftm = length{}; -inline constexpr auto kyd = length{}; -inline constexpr auto mile = length{}; -inline constexpr auto naut_mi = length{}; +inline constexpr auto in = reference{}; +inline constexpr auto ft = reference{}; +inline constexpr auto yd = reference{}; +inline constexpr auto ftm = reference{}; +inline constexpr auto kyd = reference{}; +inline constexpr auto mile = reference{}; +inline constexpr auto naut_mi = reference{}; } // namespace unit_constants diff --git a/src/systems/si-fps/include/units/isq/si/fps/mass.h b/src/systems/si-fps/include/units/isq/si/fps/mass.h index a2b9814e..7402d88a 100644 --- a/src/systems/si-fps/include/units/isq/si/fps/mass.h +++ b/src/systems/si-fps/include/units/isq/si/fps/mass.h @@ -93,15 +93,15 @@ constexpr auto operator"" _q_lton(long double l) { return mass{}; -inline constexpr auto dr = mass{}; -inline constexpr auto oz = mass{}; -inline constexpr auto lb = mass{}; -inline constexpr auto st = mass{}; -inline constexpr auto qr = mass{}; -inline constexpr auto cwt = mass{}; -inline constexpr auto ston = mass{}; -inline constexpr auto lton = mass{}; +inline constexpr auto gr = reference{}; +inline constexpr auto dr = reference{}; +inline constexpr auto oz = reference{}; +inline constexpr auto lb = reference{}; +inline constexpr auto st = reference{}; +inline constexpr auto qr = reference{}; +inline constexpr auto cwt = reference{}; +inline constexpr auto ston = reference{}; +inline constexpr auto lton = reference{}; } // namespace unit_constants diff --git a/src/systems/si-fps/include/units/isq/si/fps/power.h b/src/systems/si-fps/include/units/isq/si/fps/power.h index 3dee4ca6..a61ad406 100644 --- a/src/systems/si-fps/include/units/isq/si/fps/power.h +++ b/src/systems/si-fps/include/units/isq/si/fps/power.h @@ -58,7 +58,7 @@ constexpr auto operator"" _q_hp(long double l) { return power{}; +inline constexpr auto hp = reference{}; } // namespace unit_constants diff --git a/src/systems/si-fps/include/units/isq/si/fps/pressure.h b/src/systems/si-fps/include/units/isq/si/fps/pressure.h index d3821785..174ed402 100644 --- a/src/systems/si-fps/include/units/isq/si/fps/pressure.h +++ b/src/systems/si-fps/include/units/isq/si/fps/pressure.h @@ -61,8 +61,8 @@ constexpr auto operator"" _q_kpsi(long double l) { return pressure{}; -inline constexpr auto kpsi = pressure{}; +inline constexpr auto psi = reference{}; +inline constexpr auto kpsi = reference{}; } // namespace unit_constants diff --git a/src/systems/si-fps/include/units/isq/si/fps/speed.h b/src/systems/si-fps/include/units/isq/si/fps/speed.h index d576aa0c..c2b3a961 100644 --- a/src/systems/si-fps/include/units/isq/si/fps/speed.h +++ b/src/systems/si-fps/include/units/isq/si/fps/speed.h @@ -60,8 +60,8 @@ constexpr auto operator"" _q_knot(long double l) { return speed{}; -inline constexpr auto knot = speed{}; +inline constexpr auto mph = reference{}; +inline constexpr auto knot = reference{}; } // namespace unit_constants diff --git a/src/systems/si-fps/include/units/isq/si/fps/volume.h b/src/systems/si-fps/include/units/isq/si/fps/volume.h index c1d8baf3..5b4e8677 100644 --- a/src/systems/si-fps/include/units/isq/si/fps/volume.h +++ b/src/systems/si-fps/include/units/isq/si/fps/volume.h @@ -50,8 +50,8 @@ constexpr auto operator"" _q_yd3(long double l) { return volume{}; -inline constexpr auto yd3 = volume{}; +inline constexpr auto ft3 = reference{}; +inline constexpr auto yd3 = reference{}; } // namespace unit_constants diff --git a/src/systems/si-iau/include/units/isq/si/iau/length.h b/src/systems/si-iau/include/units/isq/si/iau/length.h index cfc6974f..b76e62cf 100644 --- a/src/systems/si-iau/include/units/isq/si/iau/length.h +++ b/src/systems/si-iau/include/units/isq/si/iau/length.h @@ -54,9 +54,9 @@ constexpr auto operator"" _q_angstrom(long double l) { return si::length{}; -inline constexpr auto pc = si::length{}; -inline constexpr auto angstrom = si::length{}; +inline constexpr auto ly = reference{}; +inline constexpr auto pc = reference{}; +inline constexpr auto angstrom = reference{}; } // namespace unit_constants diff --git a/src/systems/si-imperial/include/units/isq/si/imperial/length.h b/src/systems/si-imperial/include/units/isq/si/imperial/length.h index 0697af2b..a5e00204 100644 --- a/src/systems/si-imperial/include/units/isq/si/imperial/length.h +++ b/src/systems/si-imperial/include/units/isq/si/imperial/length.h @@ -46,8 +46,8 @@ constexpr auto operator"" _q_rd(long double l) { return si::length{}; -inline constexpr auto rd = si::length{}; +inline constexpr auto ch = reference{}; +inline constexpr auto rd = reference{}; } // namespace unit_constants diff --git a/src/systems/si-international/include/units/isq/si/international/area.h b/src/systems/si-international/include/units/isq/si/international/area.h index 90a7513b..d6093505 100644 --- a/src/systems/si-international/include/units/isq/si/international/area.h +++ b/src/systems/si-international/include/units/isq/si/international/area.h @@ -39,7 +39,7 @@ constexpr auto operator"" _q_ft2(long double l) { return si::area{}; +inline constexpr auto ft2 = reference{}; } // namespace unit_constants diff --git a/src/systems/si-international/include/units/isq/si/international/length.h b/src/systems/si-international/include/units/isq/si/international/length.h index 179278e1..ea80c96d 100644 --- a/src/systems/si-international/include/units/isq/si/international/length.h +++ b/src/systems/si-international/include/units/isq/si/international/length.h @@ -96,14 +96,14 @@ constexpr auto operator"" _q_mil(long double l) { return si::length{}; -inline constexpr auto ft = si::length{}; -inline constexpr auto fathom = si::length{}; -inline constexpr auto in = si::length{}; -inline constexpr auto mi = si::length{}; -inline constexpr auto mi_naut = si::length{}; -inline constexpr auto thou = si::length{}; -inline constexpr auto mil = si::length{}; +inline constexpr auto yd = reference{}; +inline constexpr auto ft = reference{}; +inline constexpr auto fathom = reference{}; +inline constexpr auto in = reference{}; +inline constexpr auto mi = reference{}; +inline constexpr auto mi_naut = reference{}; +inline constexpr auto thou = reference{}; +inline constexpr auto mil = reference{}; } // namespace unit_constants diff --git a/src/systems/si-international/include/units/isq/si/international/volume.h b/src/systems/si-international/include/units/isq/si/international/volume.h index 3901a757..635627b2 100644 --- a/src/systems/si-international/include/units/isq/si/international/volume.h +++ b/src/systems/si-international/include/units/isq/si/international/volume.h @@ -39,7 +39,7 @@ constexpr auto operator"" _q_ft3(long double l) { return si::volume{}; +inline constexpr auto ft3 = reference{}; } // namespace unit_constants diff --git a/src/systems/si-typographic/include/units/isq/si/typographic/length.h b/src/systems/si-typographic/include/units/isq/si/typographic/length.h index b3a57cfd..b16fa485 100644 --- a/src/systems/si-typographic/include/units/isq/si/typographic/length.h +++ b/src/systems/si-typographic/include/units/isq/si/typographic/length.h @@ -55,10 +55,10 @@ constexpr auto operator"" _q_point_prn(long double l) { return si::length{}; -inline constexpr auto pica_prn = si::length{}; -inline constexpr auto point_comp = si::length{}; -inline constexpr auto point_prn = si::length{}; +inline constexpr auto pica_comp = reference{}; +inline constexpr auto pica_prn = reference{}; +inline constexpr auto point_comp = reference{}; +inline constexpr auto point_prn = reference{}; } // namespace unit_constants diff --git a/src/systems/si-us/include/units/isq/si/us/length.h b/src/systems/si-us/include/units/isq/si/us/length.h index 3ac5fbc4..4734e436 100644 --- a/src/systems/si-us/include/units/isq/si/us/length.h +++ b/src/systems/si-us/include/units/isq/si/us/length.h @@ -55,9 +55,9 @@ constexpr auto operator"" _q_mi_us(long double l) { return si::length{}; -inline constexpr auto fathom = si::length{}; -inline constexpr auto mi = si::length{}; +inline constexpr auto ft = reference{}; +inline constexpr auto fathom = reference{}; +inline constexpr auto mi = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/absorbed_dose.h b/src/systems/si/include/units/isq/si/absorbed_dose.h index 6dfcb6fe..f46090d1 100644 --- a/src/systems/si/include/units/isq/si/absorbed_dose.h +++ b/src/systems/si/include/units/isq/si/absorbed_dose.h @@ -146,27 +146,27 @@ constexpr auto operator"" _q_YGy(long double l) { return absorbed_dose{}; -inline constexpr auto yGy = absorbed_dose{}; -inline constexpr auto zGy = absorbed_dose{}; -inline constexpr auto aGy = absorbed_dose{}; -inline constexpr auto fGy = absorbed_dose{}; -inline constexpr auto pGy = absorbed_dose{}; -inline constexpr auto nGy = absorbed_dose{}; -inline constexpr auto uGy = absorbed_dose{}; -inline constexpr auto mGy = absorbed_dose{}; -inline constexpr auto cGy = absorbed_dose{}; -inline constexpr auto dGy = absorbed_dose{}; -inline constexpr auto daGy = absorbed_dose{}; -inline constexpr auto hGy = absorbed_dose{}; -inline constexpr auto kGy = absorbed_dose{}; -inline constexpr auto MGy = absorbed_dose{}; -inline constexpr auto GGy = absorbed_dose{}; -inline constexpr auto TGy = absorbed_dose{}; -inline constexpr auto PGy = absorbed_dose{}; -inline constexpr auto EGy = absorbed_dose{}; -inline constexpr auto ZGy = absorbed_dose{}; -inline constexpr auto YGy = absorbed_dose{}; +inline constexpr auto Gy = reference{}; +inline constexpr auto yGy = reference{}; +inline constexpr auto zGy = reference{}; +inline constexpr auto aGy = reference{}; +inline constexpr auto fGy = reference{}; +inline constexpr auto pGy = reference{}; +inline constexpr auto nGy = reference{}; +inline constexpr auto uGy = reference{}; +inline constexpr auto mGy = reference{}; +inline constexpr auto cGy = reference{}; +inline constexpr auto dGy = reference{}; +inline constexpr auto daGy = reference{}; +inline constexpr auto hGy = reference{}; +inline constexpr auto kGy = reference{}; +inline constexpr auto MGy = reference{}; +inline constexpr auto GGy = reference{}; +inline constexpr auto TGy = reference{}; +inline constexpr auto PGy = reference{}; +inline constexpr auto EGy = reference{}; +inline constexpr auto ZGy = reference{}; +inline constexpr auto YGy = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/amount_of_substance.h b/src/systems/si/include/units/isq/si/amount_of_substance.h index 97253924..29bfd03e 100644 --- a/src/systems/si/include/units/isq/si/amount_of_substance.h +++ b/src/systems/si/include/units/isq/si/amount_of_substance.h @@ -22,7 +22,7 @@ #pragma once -#include +#include #include #include #include @@ -46,7 +46,7 @@ constexpr auto operator"" _q_mol(long double l) { return amount_of_substance{}; +inline constexpr auto mol = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/area.h b/src/systems/si/include/units/isq/si/area.h index eea66da3..6dc4032b 100644 --- a/src/systems/si/include/units/isq/si/area.h +++ b/src/systems/si/include/units/isq/si/area.h @@ -151,28 +151,28 @@ constexpr auto operator"" _q_ha(long double l) { return area{}; -inline constexpr auto ym2 = area{}; -inline constexpr auto zm2 = area{}; -inline constexpr auto am2 = area{}; -inline constexpr auto fm2 = area{}; -inline constexpr auto pm2 = area{}; -inline constexpr auto nm2 = area{}; -inline constexpr auto um2 = area{}; -inline constexpr auto mm2 = area{}; -inline constexpr auto cm2 = area{}; -inline constexpr auto dm2 = area{}; -inline constexpr auto dam2 = area{}; -inline constexpr auto hm2 = area{}; -inline constexpr auto km2 = area{}; -inline constexpr auto Mm2 = area{}; -inline constexpr auto Gm2 = area{}; -inline constexpr auto Tm2 = area{}; -inline constexpr auto Pm2 = area{}; -inline constexpr auto Em2 = area{}; -inline constexpr auto Zm2 = area{}; -inline constexpr auto Ym2 = area{}; -inline constexpr auto ha = area{}; +inline constexpr auto m2 = reference{}; +inline constexpr auto ym2 = reference{}; +inline constexpr auto zm2 = reference{}; +inline constexpr auto am2 = reference{}; +inline constexpr auto fm2 = reference{}; +inline constexpr auto pm2 = reference{}; +inline constexpr auto nm2 = reference{}; +inline constexpr auto um2 = reference{}; +inline constexpr auto mm2 = reference{}; +inline constexpr auto cm2 = reference{}; +inline constexpr auto dm2 = reference{}; +inline constexpr auto dam2 = reference{}; +inline constexpr auto hm2 = reference{}; +inline constexpr auto km2 = reference{}; +inline constexpr auto Mm2 = reference{}; +inline constexpr auto Gm2 = reference{}; +inline constexpr auto Tm2 = reference{}; +inline constexpr auto Pm2 = reference{}; +inline constexpr auto Em2 = reference{}; +inline constexpr auto Zm2 = reference{}; +inline constexpr auto Ym2 = reference{}; +inline constexpr auto ha = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/capacitance.h b/src/systems/si/include/units/isq/si/capacitance.h index d37b92e9..3883d6f4 100644 --- a/src/systems/si/include/units/isq/si/capacitance.h +++ b/src/systems/si/include/units/isq/si/capacitance.h @@ -147,27 +147,27 @@ constexpr auto operator"" _q_YF(long double l) { return capacitance{}; -inline constexpr auto yF = capacitance{}; -inline constexpr auto zF = capacitance{}; -inline constexpr auto aF = capacitance{}; -inline constexpr auto fF = capacitance{}; -inline constexpr auto pF = capacitance{}; -inline constexpr auto nF = capacitance{}; -inline constexpr auto uF = capacitance{}; -inline constexpr auto mF = capacitance{}; -inline constexpr auto cF = capacitance{}; -inline constexpr auto dF = capacitance{}; -inline constexpr auto daF = capacitance{}; -inline constexpr auto hF = capacitance{}; -inline constexpr auto kF = capacitance{}; -inline constexpr auto MF = capacitance{}; -inline constexpr auto GF = capacitance{}; -inline constexpr auto TF = capacitance{}; -inline constexpr auto PF = capacitance{}; -inline constexpr auto EF = capacitance{}; -inline constexpr auto ZF = capacitance{}; -inline constexpr auto YF = capacitance{}; +inline constexpr auto F = reference{}; +inline constexpr auto yF = reference{}; +inline constexpr auto zF = reference{}; +inline constexpr auto aF = reference{}; +inline constexpr auto fF = reference{}; +inline constexpr auto pF = reference{}; +inline constexpr auto nF = reference{}; +inline constexpr auto uF = reference{}; +inline constexpr auto mF = reference{}; +inline constexpr auto cF = reference{}; +inline constexpr auto dF = reference{}; +inline constexpr auto daF = reference{}; +inline constexpr auto hF = reference{}; +inline constexpr auto kF = reference{}; +inline constexpr auto MF = reference{}; +inline constexpr auto GF = reference{}; +inline constexpr auto TF = reference{}; +inline constexpr auto PF = reference{}; +inline constexpr auto EF = reference{}; +inline constexpr auto ZF = reference{}; +inline constexpr auto YF = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/catalytic_activity.h b/src/systems/si/include/units/isq/si/catalytic_activity.h index ae1e0ac5..6969ca11 100644 --- a/src/systems/si/include/units/isq/si/catalytic_activity.h +++ b/src/systems/si/include/units/isq/si/catalytic_activity.h @@ -153,28 +153,28 @@ constexpr auto operator"" _q_U(long double l) { return catalytic_activity{}; -inline constexpr auto ykat = catalytic_activity{}; -inline constexpr auto zkat = catalytic_activity{}; -inline constexpr auto akat = catalytic_activity{}; -inline constexpr auto fkat = catalytic_activity{}; -inline constexpr auto pkat = catalytic_activity{}; -inline constexpr auto nkat = catalytic_activity{}; -inline constexpr auto ukat = catalytic_activity{}; -inline constexpr auto mkat = catalytic_activity{}; -inline constexpr auto ckat = catalytic_activity{}; -inline constexpr auto dkat = catalytic_activity{}; -inline constexpr auto dakat = catalytic_activity{}; -inline constexpr auto hkat = catalytic_activity{}; -inline constexpr auto kkat = catalytic_activity{}; -inline constexpr auto Mkat = catalytic_activity{}; -inline constexpr auto Gkat = catalytic_activity{}; -inline constexpr auto Tkat = catalytic_activity{}; -inline constexpr auto Pkat = catalytic_activity{}; -inline constexpr auto Ekat = catalytic_activity{}; -inline constexpr auto Zkat = catalytic_activity{}; -inline constexpr auto Ykat = catalytic_activity{}; -inline constexpr auto U = catalytic_activity{}; +inline constexpr auto kat = reference{}; +inline constexpr auto ykat = reference{}; +inline constexpr auto zkat = reference{}; +inline constexpr auto akat = reference{}; +inline constexpr auto fkat = reference{}; +inline constexpr auto pkat = reference{}; +inline constexpr auto nkat = reference{}; +inline constexpr auto ukat = reference{}; +inline constexpr auto mkat = reference{}; +inline constexpr auto ckat = reference{}; +inline constexpr auto dkat = reference{}; +inline constexpr auto dakat = reference{}; +inline constexpr auto hkat = reference{}; +inline constexpr auto kkat = reference{}; +inline constexpr auto Mkat = reference{}; +inline constexpr auto Gkat = reference{}; +inline constexpr auto Tkat = reference{}; +inline constexpr auto Pkat = reference{}; +inline constexpr auto Ekat = reference{}; +inline constexpr auto Zkat = reference{}; +inline constexpr auto Ykat = reference{}; +inline constexpr auto U = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/conductance.h b/src/systems/si/include/units/isq/si/conductance.h index 061964f0..5df5f195 100644 --- a/src/systems/si/include/units/isq/si/conductance.h +++ b/src/systems/si/include/units/isq/si/conductance.h @@ -126,23 +126,23 @@ constexpr auto operator"" _q_YS(long double l) { return conductance{}; -inline constexpr auto yS = conductance{}; -inline constexpr auto zS = conductance{}; -inline constexpr auto aS = conductance{}; -inline constexpr auto fS = conductance{}; -inline constexpr auto pS = conductance{}; -inline constexpr auto nS = conductance{}; -inline constexpr auto uS = conductance{}; -inline constexpr auto mS = conductance{}; -inline constexpr auto kS = conductance{}; -inline constexpr auto MS = conductance{}; -inline constexpr auto GS = conductance{}; -inline constexpr auto TS = conductance{}; -inline constexpr auto PS = conductance{}; -inline constexpr auto ES = conductance{}; -inline constexpr auto ZS = conductance{}; -inline constexpr auto YS = conductance{}; +inline constexpr auto S = reference{}; +inline constexpr auto yS = reference{}; +inline constexpr auto zS = reference{}; +inline constexpr auto aS = reference{}; +inline constexpr auto fS = reference{}; +inline constexpr auto pS = reference{}; +inline constexpr auto nS = reference{}; +inline constexpr auto uS = reference{}; +inline constexpr auto mS = reference{}; +inline constexpr auto kS = reference{}; +inline constexpr auto MS = reference{}; +inline constexpr auto GS = reference{}; +inline constexpr auto TS = reference{}; +inline constexpr auto PS = reference{}; +inline constexpr auto ES = reference{}; +inline constexpr auto ZS = reference{}; +inline constexpr auto YS = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/dynamic_viscosity.h b/src/systems/si/include/units/isq/si/dynamic_viscosity.h index 0a9c2044..53c9f132 100644 --- a/src/systems/si/include/units/isq/si/dynamic_viscosity.h +++ b/src/systems/si/include/units/isq/si/dynamic_viscosity.h @@ -45,7 +45,7 @@ constexpr auto operator"" _q_Pa_s(long double l) { return dynamic_viscosity{}; +inline constexpr auto Pa_s = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/electric_charge.h b/src/systems/si/include/units/isq/si/electric_charge.h index 4c34f9b6..b755c530 100644 --- a/src/systems/si/include/units/isq/si/electric_charge.h +++ b/src/systems/si/include/units/isq/si/electric_charge.h @@ -46,7 +46,7 @@ constexpr auto operator"" _q_C(long double l) { return electric_charge{}; +inline constexpr auto C = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/electric_current.h b/src/systems/si/include/units/isq/si/electric_current.h index a02e6381..671b9266 100644 --- a/src/systems/si/include/units/isq/si/electric_current.h +++ b/src/systems/si/include/units/isq/si/electric_current.h @@ -22,7 +22,7 @@ #pragma once -#include +#include #include #include #include @@ -146,27 +146,27 @@ constexpr auto operator"" _q_YA(long double l) { return electric_current{}; -inline constexpr auto yA = electric_current{}; -inline constexpr auto zA = electric_current{}; -inline constexpr auto aA = electric_current{}; -inline constexpr auto fA = electric_current{}; -inline constexpr auto pA = electric_current{}; -inline constexpr auto nA = electric_current{}; -inline constexpr auto uA = electric_current{}; -inline constexpr auto mA = electric_current{}; -inline constexpr auto cA = electric_current{}; -inline constexpr auto dA = electric_current{}; -inline constexpr auto daA = electric_current{}; -inline constexpr auto hA = electric_current{}; -inline constexpr auto kA = electric_current{}; -inline constexpr auto MA = electric_current{}; -inline constexpr auto GA = electric_current{}; -inline constexpr auto TA = electric_current{}; -inline constexpr auto PA = electric_current{}; -inline constexpr auto EA = electric_current{}; -inline constexpr auto ZA = electric_current{}; -inline constexpr auto YA = electric_current{}; +inline constexpr auto A = reference{}; +inline constexpr auto yA = reference{}; +inline constexpr auto zA = reference{}; +inline constexpr auto aA = reference{}; +inline constexpr auto fA = reference{}; +inline constexpr auto pA = reference{}; +inline constexpr auto nA = reference{}; +inline constexpr auto uA = reference{}; +inline constexpr auto mA = reference{}; +inline constexpr auto cA = reference{}; +inline constexpr auto dA = reference{}; +inline constexpr auto daA = reference{}; +inline constexpr auto hA = reference{}; +inline constexpr auto kA = reference{}; +inline constexpr auto MA = reference{}; +inline constexpr auto GA = reference{}; +inline constexpr auto TA = reference{}; +inline constexpr auto PA = reference{}; +inline constexpr auto EA = reference{}; +inline constexpr auto ZA = reference{}; +inline constexpr auto YA = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/energy.h b/src/systems/si/include/units/isq/si/energy.h index a412d40e..88b22f2d 100644 --- a/src/systems/si/include/units/isq/si/energy.h +++ b/src/systems/si/include/units/isq/si/energy.h @@ -137,25 +137,25 @@ constexpr auto operator"" _q_GeV(long double l) { return energy{}; -inline constexpr auto yJ = energy{}; -inline constexpr auto zJ = energy{}; -inline constexpr auto aJ = energy{}; -inline constexpr auto fJ = energy{}; -inline constexpr auto pJ = energy{}; -inline constexpr auto nJ = energy{}; -inline constexpr auto uJ = energy{}; -inline constexpr auto mJ = energy{}; -inline constexpr auto kJ = energy{}; -inline constexpr auto MJ = energy{}; -inline constexpr auto GJ = energy{}; -inline constexpr auto TJ = energy{}; -inline constexpr auto PJ = energy{}; -inline constexpr auto EJ = energy{}; -inline constexpr auto ZJ = energy{}; -inline constexpr auto YJ = energy{}; -inline constexpr auto eV = energy{}; -inline constexpr auto GeV = energy{}; +inline constexpr auto J = reference{}; +inline constexpr auto yJ = reference{}; +inline constexpr auto zJ = reference{}; +inline constexpr auto aJ = reference{}; +inline constexpr auto fJ = reference{}; +inline constexpr auto pJ = reference{}; +inline constexpr auto nJ = reference{}; +inline constexpr auto uJ = reference{}; +inline constexpr auto mJ = reference{}; +inline constexpr auto kJ = reference{}; +inline constexpr auto MJ = reference{}; +inline constexpr auto GJ = reference{}; +inline constexpr auto TJ = reference{}; +inline constexpr auto PJ = reference{}; +inline constexpr auto EJ = reference{}; +inline constexpr auto ZJ = reference{}; +inline constexpr auto YJ = reference{}; +inline constexpr auto eV = reference{}; +inline constexpr auto GeV = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/force.h b/src/systems/si/include/units/isq/si/force.h index 168ba049..be591827 100644 --- a/src/systems/si/include/units/isq/si/force.h +++ b/src/systems/si/include/units/isq/si/force.h @@ -147,27 +147,27 @@ constexpr auto operator"" _q_YN(long double l) { return force{}; -inline constexpr auto yN = force{}; -inline constexpr auto zN = force{}; -inline constexpr auto aN = force{}; -inline constexpr auto fN = force{}; -inline constexpr auto pN = force{}; -inline constexpr auto nN = force{}; -inline constexpr auto uN = force{}; -inline constexpr auto mN = force{}; -inline constexpr auto cN = force{}; -inline constexpr auto dN = force{}; -inline constexpr auto daN = force{}; -inline constexpr auto hN = force{}; -inline constexpr auto kN = force{}; -inline constexpr auto MN = force{}; -inline constexpr auto GN = force{}; -inline constexpr auto TN = force{}; -inline constexpr auto PN = force{}; -inline constexpr auto EN = force{}; -inline constexpr auto ZN = force{}; -inline constexpr auto YN = force{}; +inline constexpr auto N = reference{}; +inline constexpr auto yN = reference{}; +inline constexpr auto zN = reference{}; +inline constexpr auto aN = reference{}; +inline constexpr auto fN = reference{}; +inline constexpr auto pN = reference{}; +inline constexpr auto nN = reference{}; +inline constexpr auto uN = reference{}; +inline constexpr auto mN = reference{}; +inline constexpr auto cN = reference{}; +inline constexpr auto dN = reference{}; +inline constexpr auto daN = reference{}; +inline constexpr auto hN = reference{}; +inline constexpr auto kN = reference{}; +inline constexpr auto MN = reference{}; +inline constexpr auto GN = reference{}; +inline constexpr auto TN = reference{}; +inline constexpr auto PN = reference{}; +inline constexpr auto EN = reference{}; +inline constexpr auto ZN = reference{}; +inline constexpr auto YN = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/frequency.h b/src/systems/si/include/units/isq/si/frequency.h index 871f1eed..538c6b27 100644 --- a/src/systems/si/include/units/isq/si/frequency.h +++ b/src/systems/si/include/units/isq/si/frequency.h @@ -125,23 +125,23 @@ constexpr auto operator"" _q_YHz(long double l) { return frequency{}; -inline constexpr auto yHz = frequency{}; -inline constexpr auto zHz = frequency{}; -inline constexpr auto aHz = frequency{}; -inline constexpr auto fHz = frequency{}; -inline constexpr auto pHz = frequency{}; -inline constexpr auto nHz = frequency{}; -inline constexpr auto uHz = frequency{}; -inline constexpr auto mHz = frequency{}; -inline constexpr auto kHz = frequency{}; -inline constexpr auto MHz = frequency{}; -inline constexpr auto GHz = frequency{}; -inline constexpr auto THz = frequency{}; -inline constexpr auto PHz = frequency{}; -inline constexpr auto EHz = frequency{}; -inline constexpr auto ZHz = frequency{}; -inline constexpr auto YHz = frequency{}; +inline constexpr auto Hz = reference{}; +inline constexpr auto yHz = reference{}; +inline constexpr auto zHz = reference{}; +inline constexpr auto aHz = reference{}; +inline constexpr auto fHz = reference{}; +inline constexpr auto pHz = reference{}; +inline constexpr auto nHz = reference{}; +inline constexpr auto uHz = reference{}; +inline constexpr auto mHz = reference{}; +inline constexpr auto kHz = reference{}; +inline constexpr auto MHz = reference{}; +inline constexpr auto GHz = reference{}; +inline constexpr auto THz = reference{}; +inline constexpr auto PHz = reference{}; +inline constexpr auto EHz = reference{}; +inline constexpr auto ZHz = reference{}; +inline constexpr auto YHz = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/inductance.h b/src/systems/si/include/units/isq/si/inductance.h index 84af4a6f..7bfc48c8 100644 --- a/src/systems/si/include/units/isq/si/inductance.h +++ b/src/systems/si/include/units/isq/si/inductance.h @@ -127,23 +127,23 @@ constexpr auto operator"" _q_YH(long double l) { return inductance{}; -inline constexpr auto yH = inductance{}; -inline constexpr auto zH = inductance{}; -inline constexpr auto aH = inductance{}; -inline constexpr auto fH = inductance{}; -inline constexpr auto pH = inductance{}; -inline constexpr auto nH = inductance{}; -inline constexpr auto uH = inductance{}; -inline constexpr auto mH = inductance{}; -inline constexpr auto kH = inductance{}; -inline constexpr auto MH = inductance{}; -inline constexpr auto GH = inductance{}; -inline constexpr auto TH = inductance{}; -inline constexpr auto PH = inductance{}; -inline constexpr auto EH = inductance{}; -inline constexpr auto ZH = inductance{}; -inline constexpr auto YH = inductance{}; +inline constexpr auto H = reference{}; +inline constexpr auto yH = reference{}; +inline constexpr auto zH = reference{}; +inline constexpr auto aH = reference{}; +inline constexpr auto fH = reference{}; +inline constexpr auto pH = reference{}; +inline constexpr auto nH = reference{}; +inline constexpr auto uH = reference{}; +inline constexpr auto mH = reference{}; +inline constexpr auto kH = reference{}; +inline constexpr auto MH = reference{}; +inline constexpr auto GH = reference{}; +inline constexpr auto TH = reference{}; +inline constexpr auto PH = reference{}; +inline constexpr auto EH = reference{}; +inline constexpr auto ZH = reference{}; +inline constexpr auto YH = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/length.h b/src/systems/si/include/units/isq/si/length.h index 4caa491e..273b17f3 100644 --- a/src/systems/si/include/units/isq/si/length.h +++ b/src/systems/si/include/units/isq/si/length.h @@ -22,7 +22,7 @@ #pragma once -#include +#include #include #include #include @@ -152,28 +152,28 @@ constexpr auto operator"" _q_au(long double l) { return length{}; -inline constexpr auto ym = length{}; -inline constexpr auto zm = length{}; -inline constexpr auto am = length{}; -inline constexpr auto fm = length{}; -inline constexpr auto pm = length{}; -inline constexpr auto nm = length{}; -inline constexpr auto um = length{}; -inline constexpr auto mm = length{}; -inline constexpr auto cm = length{}; -inline constexpr auto dm = length{}; -inline constexpr auto dam = length{}; -inline constexpr auto hm = length{}; -inline constexpr auto km = length{}; -inline constexpr auto Mm = length{}; -inline constexpr auto Gm = length{}; -inline constexpr auto Tm = length{}; -inline constexpr auto Pm = length{}; -inline constexpr auto Em = length{}; -inline constexpr auto Zm = length{}; -inline constexpr auto Ym = length{}; -inline constexpr auto au = length{}; +inline constexpr auto m = reference{}; +inline constexpr auto ym = reference{}; +inline constexpr auto zm = reference{}; +inline constexpr auto am = reference{}; +inline constexpr auto fm = reference{}; +inline constexpr auto pm = reference{}; +inline constexpr auto nm = reference{}; +inline constexpr auto um = reference{}; +inline constexpr auto mm = reference{}; +inline constexpr auto cm = reference{}; +inline constexpr auto dm = reference{}; +inline constexpr auto dam = reference{}; +inline constexpr auto hm = reference{}; +inline constexpr auto km = reference{}; +inline constexpr auto Mm = reference{}; +inline constexpr auto Gm = reference{}; +inline constexpr auto Tm = reference{}; +inline constexpr auto Pm = reference{}; +inline constexpr auto Em = reference{}; +inline constexpr auto Zm = reference{}; +inline constexpr auto Ym = reference{}; +inline constexpr auto au = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/luminous_intensity.h b/src/systems/si/include/units/isq/si/luminous_intensity.h index 85989cd9..7f94d82f 100644 --- a/src/systems/si/include/units/isq/si/luminous_intensity.h +++ b/src/systems/si/include/units/isq/si/luminous_intensity.h @@ -22,7 +22,7 @@ #pragma once -#include +#include #include #include #include @@ -146,27 +146,27 @@ constexpr auto operator"" _q_Ycd(long double l) { return luminous_intensity{}; -inline constexpr auto ycd = luminous_intensity{}; -inline constexpr auto zcd = luminous_intensity{}; -inline constexpr auto acd = luminous_intensity{}; -inline constexpr auto fcd = luminous_intensity{}; -inline constexpr auto pcd = luminous_intensity{}; -inline constexpr auto ncd = luminous_intensity{}; -inline constexpr auto ucd = luminous_intensity{}; -inline constexpr auto mcd = luminous_intensity{}; -inline constexpr auto ccd = luminous_intensity{}; -inline constexpr auto dcd = luminous_intensity{}; -inline constexpr auto dacd = luminous_intensity{}; -inline constexpr auto hcd = luminous_intensity{}; -inline constexpr auto kcd = luminous_intensity{}; -inline constexpr auto Mcd = luminous_intensity{}; -inline constexpr auto Gcd = luminous_intensity{}; -inline constexpr auto Tcd = luminous_intensity{}; -inline constexpr auto Pcd = luminous_intensity{}; -inline constexpr auto Ecd = luminous_intensity{}; -inline constexpr auto Zcd = luminous_intensity{}; -inline constexpr auto Ycd = luminous_intensity{}; +inline constexpr auto cd = reference{}; +inline constexpr auto ycd = reference{}; +inline constexpr auto zcd = reference{}; +inline constexpr auto acd = reference{}; +inline constexpr auto fcd = reference{}; +inline constexpr auto pcd = reference{}; +inline constexpr auto ncd = reference{}; +inline constexpr auto ucd = reference{}; +inline constexpr auto mcd = reference{}; +inline constexpr auto ccd = reference{}; +inline constexpr auto dcd = reference{}; +inline constexpr auto dacd = reference{}; +inline constexpr auto hcd = reference{}; +inline constexpr auto kcd = reference{}; +inline constexpr auto Mcd = reference{}; +inline constexpr auto Gcd = reference{}; +inline constexpr auto Tcd = reference{}; +inline constexpr auto Pcd = reference{}; +inline constexpr auto Ecd = reference{}; +inline constexpr auto Zcd = reference{}; +inline constexpr auto Ycd = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/magnetic_flux.h b/src/systems/si/include/units/isq/si/magnetic_flux.h index db06f89c..b55ae82c 100644 --- a/src/systems/si/include/units/isq/si/magnetic_flux.h +++ b/src/systems/si/include/units/isq/si/magnetic_flux.h @@ -127,23 +127,23 @@ constexpr auto operator"" _q_YWb(long double l) { return magnetic_flux{}; -inline constexpr auto yWb = magnetic_flux{}; -inline constexpr auto zWb = magnetic_flux{}; -inline constexpr auto aWb = magnetic_flux{}; -inline constexpr auto fWb = magnetic_flux{}; -inline constexpr auto pWb = magnetic_flux{}; -inline constexpr auto nWb = magnetic_flux{}; -inline constexpr auto uWb = magnetic_flux{}; -inline constexpr auto mWb = magnetic_flux{}; -inline constexpr auto kWb = magnetic_flux{}; -inline constexpr auto MWb = magnetic_flux{}; -inline constexpr auto GWb = magnetic_flux{}; -inline constexpr auto TWb = magnetic_flux{}; -inline constexpr auto PWb = magnetic_flux{}; -inline constexpr auto EWb = magnetic_flux{}; -inline constexpr auto ZWb = magnetic_flux{}; -inline constexpr auto YWb = magnetic_flux{}; +inline constexpr auto Wb = reference{}; +inline constexpr auto yWb = reference{}; +inline constexpr auto zWb = reference{}; +inline constexpr auto aWb = reference{}; +inline constexpr auto fWb = reference{}; +inline constexpr auto pWb = reference{}; +inline constexpr auto nWb = reference{}; +inline constexpr auto uWb = reference{}; +inline constexpr auto mWb = reference{}; +inline constexpr auto kWb = reference{}; +inline constexpr auto MWb = reference{}; +inline constexpr auto GWb = reference{}; +inline constexpr auto TWb = reference{}; +inline constexpr auto PWb = reference{}; +inline constexpr auto EWb = reference{}; +inline constexpr auto ZWb = reference{}; +inline constexpr auto YWb = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/magnetic_induction.h b/src/systems/si/include/units/isq/si/magnetic_induction.h index ef46d3f5..b391ee14 100644 --- a/src/systems/si/include/units/isq/si/magnetic_induction.h +++ b/src/systems/si/include/units/isq/si/magnetic_induction.h @@ -135,24 +135,24 @@ constexpr auto operator"" _q_G(long double l) { return magnetic_induction{}; -inline constexpr auto yT = magnetic_induction{}; -inline constexpr auto zT = magnetic_induction{}; -inline constexpr auto aT = magnetic_induction{}; -inline constexpr auto fT = magnetic_induction{}; -inline constexpr auto pT = magnetic_induction{}; -inline constexpr auto nT = magnetic_induction{}; -inline constexpr auto uT = magnetic_induction{}; -inline constexpr auto mT = magnetic_induction{}; -inline constexpr auto kT = magnetic_induction{}; -inline constexpr auto MT = magnetic_induction{}; -inline constexpr auto GT = magnetic_induction{}; -inline constexpr auto TT = magnetic_induction{}; -inline constexpr auto PT = magnetic_induction{}; -inline constexpr auto ET = magnetic_induction{}; -inline constexpr auto ZT = magnetic_induction{}; -inline constexpr auto YT = magnetic_induction{}; -inline constexpr auto G = magnetic_induction{}; +inline constexpr auto T = reference{}; +inline constexpr auto yT = reference{}; +inline constexpr auto zT = reference{}; +inline constexpr auto aT = reference{}; +inline constexpr auto fT = reference{}; +inline constexpr auto pT = reference{}; +inline constexpr auto nT = reference{}; +inline constexpr auto uT = reference{}; +inline constexpr auto mT = reference{}; +inline constexpr auto kT = reference{}; +inline constexpr auto MT = reference{}; +inline constexpr auto GT = reference{}; +inline constexpr auto TT = reference{}; +inline constexpr auto PT = reference{}; +inline constexpr auto ET = reference{}; +inline constexpr auto ZT = reference{}; +inline constexpr auto YT = reference{}; +inline constexpr auto G = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/mass.h b/src/systems/si/include/units/isq/si/mass.h index f2ce0977..9e3e1219 100644 --- a/src/systems/si/include/units/isq/si/mass.h +++ b/src/systems/si/include/units/isq/si/mass.h @@ -22,7 +22,7 @@ #pragma once -#include +#include #include #include #include @@ -258,49 +258,49 @@ constexpr auto operator"" _q_Da(long double l) { return mass{}; -inline constexpr auto yg = mass{}; -inline constexpr auto zg = mass{}; -inline constexpr auto ag = mass{}; -inline constexpr auto fg = mass{}; -inline constexpr auto pg = mass{}; -inline constexpr auto ng = mass{}; -inline constexpr auto ug = mass{}; -inline constexpr auto mg = mass{}; -inline constexpr auto cg = mass{}; -inline constexpr auto dg = mass{}; -inline constexpr auto dag = mass{}; -inline constexpr auto hg = mass{}; -inline constexpr auto kg = mass{}; -inline constexpr auto Mg = mass{}; -inline constexpr auto Gg = mass{}; -inline constexpr auto Tg = mass{}; -inline constexpr auto Pg = mass{}; -inline constexpr auto Eg = mass{}; -inline constexpr auto Zg = mass{}; -inline constexpr auto Yg = mass{}; -inline constexpr auto t = mass{}; -inline constexpr auto yt = mass{}; -inline constexpr auto zt = mass{}; -inline constexpr auto at = mass{}; -inline constexpr auto ft = mass{}; -inline constexpr auto pt = mass{}; -inline constexpr auto nt = mass{}; -inline constexpr auto ut = mass{}; -inline constexpr auto mt = mass{}; -inline constexpr auto ct = mass{}; -inline constexpr auto dt = mass{}; -inline constexpr auto dat = mass{}; -inline constexpr auto ht = mass{}; -inline constexpr auto kt = mass{}; -inline constexpr auto Mt = mass{}; -inline constexpr auto Gt = mass{}; -inline constexpr auto Tt = mass{}; -inline constexpr auto Pt = mass{}; -inline constexpr auto Et = mass{}; -inline constexpr auto Zt = mass{}; -inline constexpr auto Yt = mass{}; -inline constexpr auto Da = mass{}; +inline constexpr auto g = reference{}; +inline constexpr auto yg = reference{}; +inline constexpr auto zg = reference{}; +inline constexpr auto ag = reference{}; +inline constexpr auto fg = reference{}; +inline constexpr auto pg = reference{}; +inline constexpr auto ng = reference{}; +inline constexpr auto ug = reference{}; +inline constexpr auto mg = reference{}; +inline constexpr auto cg = reference{}; +inline constexpr auto dg = reference{}; +inline constexpr auto dag = reference{}; +inline constexpr auto hg = reference{}; +inline constexpr auto kg = reference{}; +inline constexpr auto Mg = reference{}; +inline constexpr auto Gg = reference{}; +inline constexpr auto Tg = reference{}; +inline constexpr auto Pg = reference{}; +inline constexpr auto Eg = reference{}; +inline constexpr auto Zg = reference{}; +inline constexpr auto Yg = reference{}; +inline constexpr auto t = reference{}; +inline constexpr auto yt = reference{}; +inline constexpr auto zt = reference{}; +inline constexpr auto at = reference{}; +inline constexpr auto ft = reference{}; +inline constexpr auto pt = reference{}; +inline constexpr auto nt = reference{}; +inline constexpr auto ut = reference{}; +inline constexpr auto mt = reference{}; +inline constexpr auto ct = reference{}; +inline constexpr auto dt = reference{}; +inline constexpr auto dat = reference{}; +inline constexpr auto ht = reference{}; +inline constexpr auto kt = reference{}; +inline constexpr auto Mt = reference{}; +inline constexpr auto Gt = reference{}; +inline constexpr auto Tt = reference{}; +inline constexpr auto Pt = reference{}; +inline constexpr auto Et = reference{}; +inline constexpr auto Zt = reference{}; +inline constexpr auto Yt = reference{}; +inline constexpr auto Da = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/power.h b/src/systems/si/include/units/isq/si/power.h index dd2278a1..e85bda02 100644 --- a/src/systems/si/include/units/isq/si/power.h +++ b/src/systems/si/include/units/isq/si/power.h @@ -126,23 +126,23 @@ constexpr auto operator"" _q_YW(long double l) { return power{}; -inline constexpr auto yW = power{}; -inline constexpr auto zW = power{}; -inline constexpr auto aW = power{}; -inline constexpr auto fW = power{}; -inline constexpr auto pW = power{}; -inline constexpr auto nW = power{}; -inline constexpr auto uW = power{}; -inline constexpr auto mW = power{}; -inline constexpr auto kW = power{}; -inline constexpr auto MW = power{}; -inline constexpr auto GW = power{}; -inline constexpr auto TW = power{}; -inline constexpr auto PW = power{}; -inline constexpr auto EW = power{}; -inline constexpr auto ZW = power{}; -inline constexpr auto YW = power{}; +inline constexpr auto W = reference{}; +inline constexpr auto yW = reference{}; +inline constexpr auto zW = reference{}; +inline constexpr auto aW = reference{}; +inline constexpr auto fW = reference{}; +inline constexpr auto pW = reference{}; +inline constexpr auto nW = reference{}; +inline constexpr auto uW = reference{}; +inline constexpr auto mW = reference{}; +inline constexpr auto kW = reference{}; +inline constexpr auto MW = reference{}; +inline constexpr auto GW = reference{}; +inline constexpr auto TW = reference{}; +inline constexpr auto PW = reference{}; +inline constexpr auto EW = reference{}; +inline constexpr auto ZW = reference{}; +inline constexpr auto YW = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/pressure.h b/src/systems/si/include/units/isq/si/pressure.h index c4784edf..507edb01 100644 --- a/src/systems/si/include/units/isq/si/pressure.h +++ b/src/systems/si/include/units/isq/si/pressure.h @@ -147,27 +147,27 @@ constexpr auto operator"" _q_YPa(long double l) { return pressure{}; -inline constexpr auto yPa = pressure{}; -inline constexpr auto zPa = pressure{}; -inline constexpr auto aPa = pressure{}; -inline constexpr auto fPa = pressure{}; -inline constexpr auto pPa = pressure{}; -inline constexpr auto nPa = pressure{}; -inline constexpr auto uPa = pressure{}; -inline constexpr auto mPa = pressure{}; -inline constexpr auto cPa = pressure{}; -inline constexpr auto dPa = pressure{}; -inline constexpr auto daPa = pressure{}; -inline constexpr auto hPa = pressure{}; -inline constexpr auto kPa = pressure{}; -inline constexpr auto MPa = pressure{}; -inline constexpr auto GPa = pressure{}; -inline constexpr auto TPa = pressure{}; -inline constexpr auto PPa = pressure{}; -inline constexpr auto EPa = pressure{}; -inline constexpr auto ZPa = pressure{}; -inline constexpr auto YPa = pressure{}; +inline constexpr auto Pa = reference{}; +inline constexpr auto yPa = reference{}; +inline constexpr auto zPa = reference{}; +inline constexpr auto aPa = reference{}; +inline constexpr auto fPa = reference{}; +inline constexpr auto pPa = reference{}; +inline constexpr auto nPa = reference{}; +inline constexpr auto uPa = reference{}; +inline constexpr auto mPa = reference{}; +inline constexpr auto cPa = reference{}; +inline constexpr auto dPa = reference{}; +inline constexpr auto daPa = reference{}; +inline constexpr auto hPa = reference{}; +inline constexpr auto kPa = reference{}; +inline constexpr auto MPa = reference{}; +inline constexpr auto GPa = reference{}; +inline constexpr auto TPa = reference{}; +inline constexpr auto PPa = reference{}; +inline constexpr auto EPa = reference{}; +inline constexpr auto ZPa = reference{}; +inline constexpr auto YPa = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/radioactivity.h b/src/systems/si/include/units/isq/si/radioactivity.h index ea2c5287..ee5440b8 100644 --- a/src/systems/si/include/units/isq/si/radioactivity.h +++ b/src/systems/si/include/units/isq/si/radioactivity.h @@ -145,27 +145,27 @@ constexpr auto operator"" _q_YBq(long double l) { return radioactivity{}; -inline constexpr auto yBq = radioactivity{}; -inline constexpr auto zBq = radioactivity{}; -inline constexpr auto aBq = radioactivity{}; -inline constexpr auto fBq = radioactivity{}; -inline constexpr auto pBq = radioactivity{}; -inline constexpr auto nBq = radioactivity{}; -inline constexpr auto uBq = radioactivity{}; -inline constexpr auto mBq = radioactivity{}; -inline constexpr auto cBq = radioactivity{}; -inline constexpr auto dBq = radioactivity{}; -inline constexpr auto daBq = radioactivity{}; -inline constexpr auto hBq = radioactivity{}; -inline constexpr auto kBq = radioactivity{}; -inline constexpr auto MBq = radioactivity{}; -inline constexpr auto GBq = radioactivity{}; -inline constexpr auto TBq = radioactivity{}; -inline constexpr auto PBq = radioactivity{}; -inline constexpr auto EBq = radioactivity{}; -inline constexpr auto ZBq = radioactivity{}; -inline constexpr auto YBq = radioactivity{}; +inline constexpr auto Bq = reference{}; +inline constexpr auto yBq = reference{}; +inline constexpr auto zBq = reference{}; +inline constexpr auto aBq = reference{}; +inline constexpr auto fBq = reference{}; +inline constexpr auto pBq = reference{}; +inline constexpr auto nBq = reference{}; +inline constexpr auto uBq = reference{}; +inline constexpr auto mBq = reference{}; +inline constexpr auto cBq = reference{}; +inline constexpr auto dBq = reference{}; +inline constexpr auto daBq = reference{}; +inline constexpr auto hBq = reference{}; +inline constexpr auto kBq = reference{}; +inline constexpr auto MBq = reference{}; +inline constexpr auto GBq = reference{}; +inline constexpr auto TBq = reference{}; +inline constexpr auto PBq = reference{}; +inline constexpr auto EBq = reference{}; +inline constexpr auto ZBq = reference{}; +inline constexpr auto YBq = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/resistance.h b/src/systems/si/include/units/isq/si/resistance.h index a7b2cb11..6eab97b2 100644 --- a/src/systems/si/include/units/isq/si/resistance.h +++ b/src/systems/si/include/units/isq/si/resistance.h @@ -127,23 +127,23 @@ constexpr auto operator"" _q_YR(long double l) { return resistance{}; -inline constexpr auto yR = resistance{}; -inline constexpr auto zR = resistance{}; -inline constexpr auto aR = resistance{}; -inline constexpr auto fR = resistance{}; -inline constexpr auto pR = resistance{}; -inline constexpr auto nR = resistance{}; -inline constexpr auto uR = resistance{}; -inline constexpr auto mR = resistance{}; -inline constexpr auto kR = resistance{}; -inline constexpr auto MR = resistance{}; -inline constexpr auto GR = resistance{}; -inline constexpr auto TR = resistance{}; -inline constexpr auto PR = resistance{}; -inline constexpr auto ER = resistance{}; -inline constexpr auto ZR = resistance{}; -inline constexpr auto YR = resistance{}; +inline constexpr auto R = reference{}; +inline constexpr auto yR = reference{}; +inline constexpr auto zR = reference{}; +inline constexpr auto aR = reference{}; +inline constexpr auto fR = reference{}; +inline constexpr auto pR = reference{}; +inline constexpr auto nR = reference{}; +inline constexpr auto uR = reference{}; +inline constexpr auto mR = reference{}; +inline constexpr auto kR = reference{}; +inline constexpr auto MR = reference{}; +inline constexpr auto GR = reference{}; +inline constexpr auto TR = reference{}; +inline constexpr auto PR = reference{}; +inline constexpr auto ER = reference{}; +inline constexpr auto ZR = reference{}; +inline constexpr auto YR = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/thermodynamic_temperature.h b/src/systems/si/include/units/isq/si/thermodynamic_temperature.h index a6708fb1..0a592dfe 100644 --- a/src/systems/si/include/units/isq/si/thermodynamic_temperature.h +++ b/src/systems/si/include/units/isq/si/thermodynamic_temperature.h @@ -22,7 +22,7 @@ #pragma once -#include +#include #include #include @@ -45,7 +45,7 @@ constexpr auto operator"" _q_K(long double l) { return thermodynamic_temperature namespace unit_constants { -inline constexpr auto K = thermodynamic_temperature{}; +inline constexpr auto K = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/time.h b/src/systems/si/include/units/isq/si/time.h index c7d6e552..78f1750a 100644 --- a/src/systems/si/include/units/isq/si/time.h +++ b/src/systems/si/include/units/isq/si/time.h @@ -22,7 +22,7 @@ #pragma once -#include +#include #include #include #include @@ -101,18 +101,18 @@ constexpr auto operator"" _q_d(long double l) { return time(l) namespace unit_constants { -inline constexpr auto ys = time{}; -inline constexpr auto zs = time{}; -inline constexpr auto as = time{}; -inline constexpr auto fs = time{}; -inline constexpr auto ps = time{}; -inline constexpr auto ns = time{}; -inline constexpr auto us = time{}; -inline constexpr auto ms = time{}; -inline constexpr auto s = time{}; -inline constexpr auto min = time{}; -inline constexpr auto h = time{}; -inline constexpr auto d = time{}; +inline constexpr auto ys = reference{}; +inline constexpr auto zs = reference{}; +inline constexpr auto as = reference{}; +inline constexpr auto fs = reference{}; +inline constexpr auto ps = reference{}; +inline constexpr auto ns = reference{}; +inline constexpr auto us = reference{}; +inline constexpr auto ms = reference{}; +inline constexpr auto s = reference{}; +inline constexpr auto min = reference{}; +inline constexpr auto h = reference{}; +inline constexpr auto d = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/torque.h b/src/systems/si/include/units/isq/si/torque.h index 7728da40..49321b5a 100644 --- a/src/systems/si/include/units/isq/si/torque.h +++ b/src/systems/si/include/units/isq/si/torque.h @@ -47,7 +47,7 @@ constexpr auto operator"" _q_Nm_per_rad(long double l) { return torque{}; +inline constexpr auto Nm_per_rad = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/voltage.h b/src/systems/si/include/units/isq/si/voltage.h index df866979..ea59b452 100644 --- a/src/systems/si/include/units/isq/si/voltage.h +++ b/src/systems/si/include/units/isq/si/voltage.h @@ -147,27 +147,27 @@ constexpr auto operator"" _q_YV(long double l) { return voltage{}; -inline constexpr auto yV = voltage{}; -inline constexpr auto zV = voltage{}; -inline constexpr auto aV = voltage{}; -inline constexpr auto fV = voltage{}; -inline constexpr auto pV = voltage{}; -inline constexpr auto nV = voltage{}; -inline constexpr auto uV = voltage{}; -inline constexpr auto mV = voltage{}; -inline constexpr auto cV = voltage{}; -inline constexpr auto dV = voltage{}; -inline constexpr auto daV = voltage{}; -inline constexpr auto hV = voltage{}; -inline constexpr auto kV = voltage{}; -inline constexpr auto MV = voltage{}; -inline constexpr auto GV = voltage{}; -inline constexpr auto TV = voltage{}; -inline constexpr auto PV = voltage{}; -inline constexpr auto EV = voltage{}; -inline constexpr auto ZV = voltage{}; -inline constexpr auto YV = voltage{}; +inline constexpr auto V = reference{}; +inline constexpr auto yV = reference{}; +inline constexpr auto zV = reference{}; +inline constexpr auto aV = reference{}; +inline constexpr auto fV = reference{}; +inline constexpr auto pV = reference{}; +inline constexpr auto nV = reference{}; +inline constexpr auto uV = reference{}; +inline constexpr auto mV = reference{}; +inline constexpr auto cV = reference{}; +inline constexpr auto dV = reference{}; +inline constexpr auto daV = reference{}; +inline constexpr auto hV = reference{}; +inline constexpr auto kV = reference{}; +inline constexpr auto MV = reference{}; +inline constexpr auto GV = reference{}; +inline constexpr auto TV = reference{}; +inline constexpr auto PV = reference{}; +inline constexpr auto EV = reference{}; +inline constexpr auto ZV = reference{}; +inline constexpr auto YV = reference{}; } // namespace unit_constants diff --git a/src/systems/si/include/units/isq/si/volume.h b/src/systems/si/include/units/isq/si/volume.h index fee448a8..52dcf1a3 100644 --- a/src/systems/si/include/units/isq/si/volume.h +++ b/src/systems/si/include/units/isq/si/volume.h @@ -251,48 +251,48 @@ constexpr auto operator"" _q_Yl(long double l) { return volume{}; -inline constexpr auto ym3 = volume{}; -inline constexpr auto zm3 = volume{}; -inline constexpr auto am3 = volume{}; -inline constexpr auto fm3 = volume{}; -inline constexpr auto pm3 = volume{}; -inline constexpr auto nm3 = volume{}; -inline constexpr auto um3 = volume{}; -inline constexpr auto mm3 = volume{}; -inline constexpr auto cm3 = volume{}; -inline constexpr auto dm3 = volume{}; -inline constexpr auto dam3 = volume{}; -inline constexpr auto hm3 = volume{}; -inline constexpr auto km3 = volume{}; -inline constexpr auto Mm3 = volume{}; -inline constexpr auto Gm3 = volume{}; -inline constexpr auto Tm3 = volume{}; -inline constexpr auto Pm3 = volume{}; -inline constexpr auto Em3 = volume{}; -inline constexpr auto Zm3 = volume{}; -inline constexpr auto Ym3 = volume{}; -inline constexpr auto l = volume{}; -inline constexpr auto yl = volume{}; -inline constexpr auto zl = volume{}; -inline constexpr auto al = volume{}; -inline constexpr auto fl = volume{}; -inline constexpr auto pl = volume{}; -inline constexpr auto nl = volume{}; -inline constexpr auto ul = volume{}; -inline constexpr auto ml = volume{}; -inline constexpr auto cl = volume{}; -inline constexpr auto dl = volume{}; -inline constexpr auto dal = volume{}; -inline constexpr auto hl = volume{}; -inline constexpr auto kl = volume{}; -inline constexpr auto Ml = volume{}; -inline constexpr auto Gl = volume{}; -inline constexpr auto Tl = volume{}; -inline constexpr auto Pl = volume{}; -inline constexpr auto El = volume{}; -inline constexpr auto Zl = volume{}; -inline constexpr auto Yl = volume{}; +inline constexpr auto m3 = reference{}; +inline constexpr auto ym3 = reference{}; +inline constexpr auto zm3 = reference{}; +inline constexpr auto am3 = reference{}; +inline constexpr auto fm3 = reference{}; +inline constexpr auto pm3 = reference{}; +inline constexpr auto nm3 = reference{}; +inline constexpr auto um3 = reference{}; +inline constexpr auto mm3 = reference{}; +inline constexpr auto cm3 = reference{}; +inline constexpr auto dm3 = reference{}; +inline constexpr auto dam3 = reference{}; +inline constexpr auto hm3 = reference{}; +inline constexpr auto km3 = reference{}; +inline constexpr auto Mm3 = reference{}; +inline constexpr auto Gm3 = reference{}; +inline constexpr auto Tm3 = reference{}; +inline constexpr auto Pm3 = reference{}; +inline constexpr auto Em3 = reference{}; +inline constexpr auto Zm3 = reference{}; +inline constexpr auto Ym3 = reference{}; +inline constexpr auto l = reference{}; +inline constexpr auto yl = reference{}; +inline constexpr auto zl = reference{}; +inline constexpr auto al = reference{}; +inline constexpr auto fl = reference{}; +inline constexpr auto pl = reference{}; +inline constexpr auto nl = reference{}; +inline constexpr auto ul = reference{}; +inline constexpr auto ml = reference{}; +inline constexpr auto cl = reference{}; +inline constexpr auto dl = reference{}; +inline constexpr auto dal = reference{}; +inline constexpr auto hl = reference{}; +inline constexpr auto kl = reference{}; +inline constexpr auto Ml = reference{}; +inline constexpr auto Gl = reference{}; +inline constexpr auto Tl = reference{}; +inline constexpr auto Pl = reference{}; +inline constexpr auto El = reference{}; +inline constexpr auto Zl = reference{}; +inline constexpr auto Yl = reference{}; } // namespace unit_constants diff --git a/test/unit_test/static/quantity_kind_test.cpp b/test/unit_test/static/quantity_kind_test.cpp index 82ee37e1..ed7addfb 100644 --- a/test/unit_test/static/quantity_kind_test.cpp +++ b/test/unit_test/static/quantity_kind_test.cpp @@ -434,6 +434,11 @@ concept invalid_compound_assignments = requires(quantity_kind requires !requires { w *= 1 * km / m; }; requires !requires { w /= 1 * km / m; }; requires !requires { w %= 1 * km / m; }; + requires !requires { w += m; }; + requires !requires { w -= m; }; + requires !requires { w *= m; }; + requires !requires { w /= m; }; + requires !requires { w %= m; }; requires !requires { w *= quantity_kind, scaled_unit, int>{1}; }; requires !requires { w /= quantity_kind, scaled_unit, int>{1}; }; requires !requires { w %= quantity_kind, scaled_unit, int>{1}; }; @@ -478,10 +483,12 @@ static_assert(!std::is_invocable_v, width, double>); static_assert(!std::is_invocable_v, width, length>); static_assert(!std::is_invocable_v, width, quantity_point>); static_assert(!std::is_invocable_v, width, height>); +static_assert(!std::is_invocable_v, width, reference>); static_assert(!std::is_invocable_v, width, double>); static_assert(!std::is_invocable_v, width, length>); static_assert(!std::is_invocable_v, width, quantity_point>); static_assert(!std::is_invocable_v, width, height>); +static_assert(!std::is_invocable_v, width, reference>); // clang-format off static_assert(!std::is_invocable_v, quantity_kind, one>, quantity_kind, one>>); @@ -541,6 +548,7 @@ static_assert(same(apples(2) * quantity(2), apples(4))); static_assert(same(quantity(2) * apples(2), apples(4))); // clang-format off +static_assert(same(width(4 * m) * m, horizontal_area(4 * m * m))); static_assert(same(width(2 * m) * width(2 * m), horizontal_area(4 * m * m))); static_assert(same(width(2 * m) * width(2 * m), horizontal_area(4 * m * m))); static_assert(same(width(2 * m) * width(2 * m), horizontal_area(4 * m * m))); @@ -549,6 +557,7 @@ static_assert(same(width(2 * m) * width(2 * m), horiz static_assert(same(apples(2) * apples(2), apples(4))); static_assert(same(apples(2) * (2 / apples(1)), apples(4))); +static_assert(same(width(4 * m) * mm, horizontal_area(4 * m * mm))); static_assert(same(width(2 * m) * width(2 * m), horizontal_area(4 * m * m))); static_assert(same(width(2 * m) * (1 / width(2 * m)), quantity_kind, one>(1))); @@ -626,6 +635,7 @@ static_assert(same(apples(8) / apples(2), apples(4 static_assert(same(apples(8) / (2 / apples(1)), apples(4))); static_assert(same(horizontal_area(8 * m * m) / width(2 * m), width(4 * m))); +static_assert(same(horizontal_area(4 * m * m) / m, width(4 * m))); static_assert(same(width(2 * m) % 3, width(2 * m))); static_assert(same(width(3 * m) % width(2 * m), width(1 * m))); @@ -634,14 +644,17 @@ static_assert(is_same_v< decltype((width(0 * m) % width(0 * m)).common().count()), decltype(std::uint8_t(0) % std::uint8_t(0))>); +static_assert(!std::is_invocable_v, reference, width>); static_assert(!std::is_invocable_v, width, height>); static_assert(!std::is_invocable_v, height, quantity_point>); static_assert(!std::is_invocable_v, quantity_point, height>); +static_assert(!std::is_invocable_v, reference, width>); static_assert(!std::is_invocable_v, width, height>); static_assert(!std::is_invocable_v, height, quantity_point>); static_assert(!std::is_invocable_v, quantity_point, height>); +static_assert(!std::is_invocable_v, width, reference>); static_assert(!std::is_invocable_v, width, length>); static_assert(!std::is_invocable_v, width, quantity_point>); static_assert(!std::is_invocable_v, width, double>); @@ -690,6 +703,8 @@ concept invalid_equality = requires(quantity_kind w) { requires !requires { w == 1 * m; }; requires !requires { w != 1.0 * cgs_cm; }; requires !requires { w == 1 * km; }; + requires !requires { w != m; }; + requires !requires { w == km; }; requires !requires { w != quantity(1); }; requires !requires { w == dimensionless(1.0); }; requires !requires { w != height(1 * m); }; @@ -770,7 +785,6 @@ static_assert(same(quantity_kind_cast>(width concept invalid_cast = requires { - requires !requires { quantity_kind_cast>(quantity_kind(1 * m)); }; requires !requires { quantity_kind_cast>(quantity_kind(1 * m)); }; requires !requires { quantity_kind_cast>(quantity_kind(1 * m)); }; requires !requires { quantity_kind_cast>(quantity_kind(1 * m)); }; @@ -783,7 +797,6 @@ concept invalid_cast = requires { requires !requires { quantity_kind_cast>(quantity_kind(1 * m)); }; requires !requires { quantity_kind_cast(quantity_kind(1 * m)); }; requires !requires { quantity_kind_cast(quantity_kind(1 * m)); }; - requires !requires { quantity_kind_cast(quantity_kind(1 * m)); }; requires !requires { quantity_kind_cast>(quantity_kind(1 * m)); }; requires !requires { quantity_kind_cast>(quantity_kind(1 * m)); }; }; diff --git a/test/unit_test/static/quantity_point_kind_test.cpp b/test/unit_test/static/quantity_point_kind_test.cpp index 4b320741..73844e05 100644 --- a/test/unit_test/static/quantity_point_kind_test.cpp +++ b/test/unit_test/static/quantity_point_kind_test.cpp @@ -220,9 +220,6 @@ static_assert(construct_from_only>(1).relative().common() static_assert(construct_from_only>(short{1}).relative().common() == 1); static_assert(construct_from_only>(1).relative().common() == 1); static_assert(construct_from_only>(1).relative().common() == 1); -static_assert(construct_from_only>(one_rep{}).relative().common() == 1); -static_assert(construct_from_only>(one_rep{}).relative().common() == 1); -static_assert(construct_from_only>(one_rep{}).relative().common() == 1); static_assert(construct_from_only>(1ULL).relative().common().count() == 1); static_assert(construct_from_only>(1).relative().common().count() == 1); static_assert(!constructible_or_convertible_from>(1.0)); @@ -605,7 +602,6 @@ static_assert(same(quantity_point_kind_cast>(abscissa concept invalid_cast = requires(Int i) { - requires !requires { quantity_point_kind_cast>(abscissa(i * m)); }; requires !requires { quantity_point_kind_cast>(abscissa(i * m)); }; requires !requires { quantity_point_kind_cast>(abscissa(i * m)); }; requires !requires { quantity_point_kind_cast(abscissa(i * m)); }; @@ -620,7 +616,6 @@ concept invalid_cast = requires(Int i) { requires !requires { quantity_point_kind_cast>(abscissa(i * m)); }; requires !requires { quantity_point_kind_cast(abscissa(i * m)); }; requires !requires { quantity_point_kind_cast(abscissa(i * m)); }; - requires !requires { quantity_point_kind_cast(abscissa(i * m)); }; requires !requires { quantity_point_kind_cast>(abscissa(i * m)); }; requires !requires { quantity_point_kind_cast>(abscissa(i * m)); }; }; diff --git a/test/unit_test/static/quantity_test.cpp b/test/unit_test/static/quantity_test.cpp index 73b0cb80..1dd64367 100644 --- a/test/unit_test/static/quantity_test.cpp +++ b/test/unit_test/static/quantity_test.cpp @@ -342,6 +342,13 @@ concept invalid_compound_assignments = requires() { requires !requires(length l) { l %= 2._q_m; }; requires !requires(length l) { l %= 2_q_m; }; requires !requires(length l) { l %= 2._q_m; }; + + // no unit constants + requires !requires(length l) { l += m; }; + requires !requires(length l) { l -= m; }; + requires !requires(length l) { l *= m; }; + requires !requires(length l) { l /= m; }; + requires !requires(length l) { l %= m; }; }; static_assert(invalid_compound_assignments); @@ -363,6 +370,14 @@ concept invalid_binary_operations = requires { requires !requires(length a, length b) { a % b; }; requires !requires(length a, length b) { a % b; }; requires !requires(length a, length b) { b % a; }; + + // unit constants + requires !requires { length(1) + m; }; + requires !requires { length(1) - m; }; + requires !requires { length(1) % m; }; + requires !requires { m + length(1); }; + requires !requires { m - length(1); }; + requires !requires { m % length(1); }; }; static_assert(invalid_binary_operations); @@ -542,6 +557,11 @@ static_assert(quantity_cast(10_q_km / 5_q_m).count() == 2000); static_assert((10_q_s * 2_q_kHz).count() == 20); +// unit constants + +static_assert(2_q_m * m == (2_q_m2)); +static_assert(2_q_m2 / m == (2_q_m)); + // dimensionless @@ -581,6 +601,9 @@ static_assert((quantity{std::uint8_t(0)} - quantity{std::uint8_t(1)}).count() == static_assert(is_same_v); +static_assert(quantity{2} * m == 2_q_m); +static_assert(quantity{2} / m == 2 / 1_q_m); + /////////////////////// // equality operators diff --git a/test/unit_test/static/unit_constants.cpp b/test/unit_test/static/unit_constants.cpp index b940f965..591bbf91 100644 --- a/test/unit_test/static/unit_constants.cpp +++ b/test/unit_test/static/unit_constants.cpp @@ -60,14 +60,15 @@ concept invalid_operations = requires { }; static_assert(invalid_operations); -constexpr auto m_per_s = m / s; - static_assert(2_q_m / s == 2_q_m_per_s); static_assert(2 * m / s == 2_q_m_per_s); static_assert(2 / s * m == 2_q_m_per_s); static_assert(2 * (m / s) == 2_q_m_per_s); + +#if !(UNITS_COMP_GCC == 10 && UNITS_COMP_GCC_MINOR == 1) +constexpr auto m_per_s = m / s; static_assert(2 * ::m_per_s == 2_q_m_per_s); -static_assert(is_same_v); +#endif static_assert(120 * km / (2 * h) == 60_q_km_per_h); static_assert(120 * km / 2 / h == 60_q_km_per_h); @@ -82,14 +83,17 @@ static_assert(is_same_v) static_assert(1. / 4 * m2 == 1._q_m2 / 4); -#if !defined(UNITS_COMP_CLANG) // -Wshadow -static_assert([] { +UNITS_DIAGNOSTIC_PUSH +UNITS_DIAGNOSTIC_IGNORE_SHADOW +constexpr bool test_hiding() { Speed auto v0 = 10 * m / s; signed s = 2; // hides ^ Length auto v = 20 * m / s; /* */ v0 = 10 * m / ::s; return !is_same_v; -}()); -#endif +} + +static_assert(test_hiding()); +UNITS_DIAGNOSTIC_POP int main() {}