diff --git a/docs/blog/posts/2.2.0-released.md b/docs/blog/posts/2.2.0-released.md index 1eb92de4..936840a1 100644 --- a/docs/blog/posts/2.2.0-released.md +++ b/docs/blog/posts/2.2.0-released.md @@ -363,7 +363,7 @@ Example 1 (clang): 61 | concept QuantityOf = Quantity && QuantitySpecOf, QS>; | ^ note: because 'implicitly_convertible(kind_of_ > >{}, struct speed{{{}}})' evaluated to false - 147 | QuantitySpec && QuantitySpec> && implicitly_convertible(T{}, QS) && + 147 | QuantitySpec && QuantitySpec && implicitly_convertible(T{}, QS) && | ^ 1 error generated. Compiler returned: 1 @@ -386,7 +386,7 @@ Example 1 (clang): 61 | concept QuantityOf = Quantity && QuantitySpecOf, QS>; | ^ note: because 'implicitly_convertible(kind_of_ >{{}, {{}}}>{}, struct speed{{{}}})' evaluated to false - 147 | QuantitySpec && QuantitySpec> && implicitly_convertible(T{}, QS) && + 147 | QuantitySpec && QuantitySpec && implicitly_convertible(T{}, QS) && | ^ 1 error generated. Compiler returned: 1 diff --git a/src/core/include/mp-units/bits/get_associated_quantity.h b/src/core/include/mp-units/bits/get_associated_quantity.h index 2a474303..881c61e8 100644 --- a/src/core/include/mp-units/bits/get_associated_quantity.h +++ b/src/core/include/mp-units/bits/get_associated_quantity.h @@ -59,7 +59,7 @@ template [[nodiscard]] consteval auto get_associated_quantity_impl(U u); template -using to_quantity_spec = std::remove_const_t; +using to_quantity_spec = decltype(get_associated_quantity_impl(U{})); template [[nodiscard]] consteval auto get_associated_quantity_impl(U u) diff --git a/src/core/include/mp-units/bits/hacks.h b/src/core/include/mp-units/bits/hacks.h index 5a0d3e11..5030debb 100644 --- a/src/core/include/mp-units/bits/hacks.h +++ b/src/core/include/mp-units/bits/hacks.h @@ -87,6 +87,13 @@ #endif +#if MP_UNITS_COMP_GCC + +#define MP_UNITS_REMOVE_CONST(expr) std::remove_const_t + +#else + +#define MP_UNITS_REMOVE_CONST(expr) expr #endif diff --git a/src/core/include/mp-units/ext/type_traits.h b/src/core/include/mp-units/ext/type_traits.h index 2058d3c8..a31b7214 100644 --- a/src/core/include/mp-units/ext/type_traits.h +++ b/src/core/include/mp-units/ext/type_traits.h @@ -136,7 +136,7 @@ concept one_of = (false || ... || std::same_as); template [[nodiscard]] consteval bool contains() { - return (false || ... || is_same_v, T>); + return (false || ... || is_same_v); } template typename T, typename... Ts> @@ -160,7 +160,7 @@ template auto V> template [[nodiscard]] consteval auto get() { - if constexpr (is_same_v>) + if constexpr (is_same_v) return V1; else return get(); diff --git a/src/core/include/mp-units/framework/dimension_concepts.h b/src/core/include/mp-units/framework/dimension_concepts.h index 9826e1b0..11be622d 100644 --- a/src/core/include/mp-units/framework/dimension_concepts.h +++ b/src/core/include/mp-units/framework/dimension_concepts.h @@ -109,6 +109,6 @@ concept Dimension = detail::BaseDimension || detail::DerivedDimension; * Satisfied when both argument satisfy a `Dimension` concept and when they compare equal. */ MP_UNITS_EXPORT template -concept DimensionOf = Dimension && Dimension> && (T{} == D); +concept DimensionOf = Dimension && Dimension && (T{} == D); } // namespace mp_units diff --git a/src/core/include/mp-units/framework/expression_template.h b/src/core/include/mp-units/framework/expression_template.h index c0eddbda..291bfedb 100644 --- a/src/core/include/mp-units/framework/expression_template.h +++ b/src/core/include/mp-units/framework/expression_template.h @@ -534,8 +534,8 @@ template typename Proj, template typename To, ty expr_type_projectable... Dens> [[nodiscard]] consteval auto expr_map_impl(type_list, type_list) { - return (OneType{} * ... * map_power(typename expr_type_map, Proj>::type{})) / - (OneType{} * ... * map_power(typename expr_type_map, Proj>::type{})); + return (OneType{} * ... * map_power(typename expr_type_map::type{})) / + (OneType{} * ... * map_power(typename expr_type_map::type{})); } /** diff --git a/src/core/include/mp-units/framework/quantity.h b/src/core/include/mp-units/framework/quantity.h index f67a79bd..fb63eb82 100644 --- a/src/core/include/mp-units/framework/quantity.h +++ b/src/core/include/mp-units/framework/quantity.h @@ -140,8 +140,7 @@ public: template requires std::same_as, Rep> - constexpr quantity(Value&& v, std::remove_const_t) : - numerical_value_is_an_implementation_detail_(std::forward(v)) + constexpr quantity(Value&& v, decltype(R)) : numerical_value_is_an_implementation_detail_(std::forward(v)) { } diff --git a/src/core/include/mp-units/framework/quantity_point.h b/src/core/include/mp-units/framework/quantity_point.h index adacb6b7..818eea6c 100644 --- a/src/core/include/mp-units/framework/quantity_point.h +++ b/src/core/include/mp-units/framework/quantity_point.h @@ -169,8 +169,7 @@ public: template requires QuantityOf, get_quantity_spec(R)> && std::constructible_from - constexpr quantity_point(Q&& q, std::remove_const_t) : - quantity_from_origin_is_an_implementation_detail_(std::forward(q)) + constexpr quantity_point(Q&& q, decltype(PO)) : quantity_from_origin_is_an_implementation_detail_(std::forward(q)) { } @@ -187,7 +186,6 @@ public: template QP> requires std::constructible_from - // TODO add perfect forwarding // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) constexpr explicit(!std::convertible_to) quantity_point(const QP& qp) : quantity_from_origin_is_an_implementation_detail_([&] { @@ -222,7 +220,7 @@ public: [[nodiscard]] constexpr MP_UNITS_CONSTRAINED_AUTO_WORKAROUND(QuantityPointOf) auto point_for( NewPO new_origin) const { - if constexpr (is_same_v>) + if constexpr (is_same_v) return *this; else return ::mp_units::quantity_point{*this - new_origin, new_origin}; @@ -388,7 +386,7 @@ explicit( template // TODO simplify when gcc catches up - requires ReferenceOf, PO1.quantity_spec> + requires ReferenceOf [[nodiscard]] constexpr QuantityPoint auto operator+(const quantity_point& qp, const quantity& q) requires requires { qp.quantity_ref_from(PO1) + q; } @@ -401,7 +399,7 @@ template template // TODO simplify when gcc catches up - requires ReferenceOf, PO2.quantity_spec> + requires ReferenceOf [[nodiscard]] constexpr QuantityPoint auto operator+(const quantity& q, const quantity_point& qp) requires requires { q + qp.quantity_ref_from(PO2); } @@ -425,7 +423,7 @@ template template // TODO simplify when gcc catches up - requires ReferenceOf, PO1.quantity_spec> + requires ReferenceOf [[nodiscard]] constexpr QuantityPoint auto operator-(const quantity_point& qp, const quantity& q) requires requires { qp.quantity_ref_from(PO1) - q; } diff --git a/src/core/include/mp-units/framework/quantity_point_concepts.h b/src/core/include/mp-units/framework/quantity_point_concepts.h index ee5ca8eb..aa2a13cc 100644 --- a/src/core/include/mp-units/framework/quantity_point_concepts.h +++ b/src/core/include/mp-units/framework/quantity_point_concepts.h @@ -105,7 +105,7 @@ concept PointOrigin = detail::AbsolutePointOrigin || detail::RelativePointOri * Satisfied by all quantity point origins that are defined using a provided quantity specification. */ MP_UNITS_EXPORT template -concept PointOriginFor = PointOrigin && QuantitySpecOf, T::quantity_spec>; +concept PointOriginFor = PointOrigin && QuantitySpecOf; MP_UNITS_EXPORT template auto PO, RepresentationOf Rep> @@ -141,7 +141,7 @@ template template concept SameAbsolutePointOriginAs = - PointOrigin && PointOrigin> && same_absolute_point_origins(T{}, V); + PointOrigin && PointOrigin && same_absolute_point_origins(T{}, V); } // namespace detail diff --git a/src/core/include/mp-units/framework/quantity_spec.h b/src/core/include/mp-units/framework/quantity_spec.h index 78d039c1..3ec46f40 100644 --- a/src/core/include/mp-units/framework/quantity_spec.h +++ b/src/core/include/mp-units/framework/quantity_spec.h @@ -218,11 +218,11 @@ MP_UNITS_EXPORT_END */ #ifdef MP_UNITS_API_NO_CRTP template auto... Args> - requires(... && !QuantitySpec>) + requires(... && !QuantitySpec) struct quantity_spec : detail::quantity_spec_interface { #else template auto... Args> - requires(... && !QuantitySpec>) + requires(... && !QuantitySpec) struct quantity_spec : detail::quantity_spec_interface { #endif static constexpr detail::BaseDimension auto dimension = Dim; @@ -261,11 +261,11 @@ struct quantity_spec : detail::quantity_spec_interface */ #ifdef MP_UNITS_API_NO_CRTP template auto... Args> - requires(... && !QuantitySpec>) + requires(... && !QuantitySpec) struct quantity_spec : detail::quantity_spec_interface { #else template auto... Args> - requires(... && !QuantitySpec>) + requires(... && !QuantitySpec) struct quantity_spec : detail::quantity_spec_interface { #endif static constexpr auto _equation_ = Eq; @@ -302,12 +302,12 @@ struct quantity_spec : detail::quantity_spec_interface */ #ifdef MP_UNITS_API_NO_CRTP template auto... Args> - requires(... && !QuantitySpec>) -struct quantity_spec : std::remove_const_t { + requires(... && !QuantitySpec) +struct quantity_spec : decltype(QS) { #else template auto... Args> - requires(... && !QuantitySpec>) -struct quantity_spec : std::remove_const_t { + requires(... && !QuantitySpec) +struct quantity_spec : decltype(QS) { #endif static constexpr auto _parent_ = QS; static constexpr quantity_character character = detail::quantity_character_init(QS.character); @@ -361,16 +361,16 @@ struct quantity_spec : std::remove_const_t { #ifdef MP_UNITS_API_NO_CRTP template auto... Args> - requires(!requires { QS._equation_; } || - (requires { QS._equation_; } && (explicitly_convertible(Eq, QS._equation_)))) && - (... && !QuantitySpec>) + requires(!requires { QS._equation_; } || (requires { + QS._equation_; + } && (explicitly_convertible(Eq, QS._equation_)))) && (... && !QuantitySpec) struct quantity_spec : quantity_spec { #else template auto... Args> - requires(!requires { QS._equation_; } || - (requires { QS._equation_; } && (explicitly_convertible(Eq, QS._equation_)))) && - (... && !QuantitySpec>) + requires(!requires { QS._equation_; } || (requires { + QS._equation_; + } && (explicitly_convertible(Eq, QS._equation_)))) && (... && !QuantitySpec) struct quantity_spec : quantity_spec { #endif static constexpr auto _equation_ = Eq; @@ -483,7 +483,7 @@ struct kind_of_ : quantity_spec, Q{}> { MP_UNITS_EXPORT template requires(detail::get_kind_tree_root(Q) == Q) -inline constexpr kind_of_> kind_of; +inline constexpr kind_of_ kind_of; namespace detail { @@ -493,7 +493,7 @@ struct is_dimensionless : std::true_type {}; template [[nodiscard]] consteval QuantitySpec auto clone_kind_of(Q q) { - if constexpr ((... && QuantityKindSpec>)) + if constexpr ((... && QuantityKindSpec)) return kind_of; else return q; @@ -566,11 +566,9 @@ template detail::expr_pow( detail::remove_kind(q))); else if constexpr (Den == 1) - return detail::clone_kind_of( - derived_quantity_spec, Num>>{}); + return detail::clone_kind_of(derived_quantity_spec>{}); else - return detail::clone_kind_of( - derived_quantity_spec, Num, Den>>{}); + return detail::clone_kind_of(derived_quantity_spec>{}); } @@ -1398,7 +1396,7 @@ template return are_ingredients_convertible(from, to); } else if constexpr (IntermediateDerivedQuantitySpec) { auto res = explode(from); - if constexpr (NamedQuantitySpec>) + if constexpr (NamedQuantitySpec) return convertible_impl(res.quantity, to); else if constexpr (requires { to._equation_; }) { auto eq = explode_to_equation(to); @@ -1407,7 +1405,7 @@ template return are_ingredients_convertible(from, to); } else if constexpr (IntermediateDerivedQuantitySpec) { auto res = explode(to); - if constexpr (NamedQuantitySpec>) + if constexpr (NamedQuantitySpec) return min(res.result, convertible_impl(from, res.quantity)); else if constexpr (requires { from._equation_; }) return min(res.result, convertible_impl(from._equation_, res.quantity)); @@ -1452,7 +1450,7 @@ namespace detail { template requires requires(Q q) { get_kind_tree_root(q); } -using to_kind = std::remove_const_t; +using to_kind = decltype(get_kind_tree_root(Q{})); #ifdef MP_UNITS_API_NO_CRTP template @@ -1509,8 +1507,8 @@ template requires(implicitly_convertible(get_kind_tree_root(q1), get_kind_tree_root(q2)) || implicitly_convertible(get_kind_tree_root(q2), get_kind_tree_root(q1))) { - using QQ1 = std::remove_const_t; - using QQ2 = std::remove_const_t; + using QQ1 = decltype(detail::remove_kind(q1)); + using QQ2 = decltype(detail::remove_kind(q2)); // NOLINTBEGIN(bugprone-branch-clone) if constexpr (is_same_v) diff --git a/src/core/include/mp-units/framework/quantity_spec_concepts.h b/src/core/include/mp-units/framework/quantity_spec_concepts.h index 920e9cf5..2887ae5e 100644 --- a/src/core/include/mp-units/framework/quantity_spec_concepts.h +++ b/src/core/include/mp-units/framework/quantity_spec_concepts.h @@ -140,7 +140,7 @@ namespace detail { template concept NestedQuantityKindSpecOf = - QuantitySpec> && QuantitySpec> && + QuantitySpec && QuantitySpec && get_kind(From) != get_kind(To) && std::derived_from, std::remove_cvref_t>; @@ -148,7 +148,7 @@ concept NestedQuantityKindSpecOf = MP_UNITS_EXPORT template concept QuantitySpecOf = - QuantitySpec && QuantitySpec> && implicitly_convertible(T{}, QS) && + QuantitySpec && QuantitySpec && implicitly_convertible(T{}, QS) && // the below is to make the following work // static_assert(ReferenceOf); // static_assert(!ReferenceOf); diff --git a/src/core/include/mp-units/framework/reference.h b/src/core/include/mp-units/framework/reference.h index 8050055a..6bd334e2 100644 --- a/src/core/include/mp-units/framework/reference.h +++ b/src/core/include/mp-units/framework/reference.h @@ -38,7 +38,7 @@ namespace mp_units { namespace detail { template -using reference_t = reference, std::remove_const_t>; +using reference_t = reference; } @@ -258,13 +258,13 @@ MP_UNITS_EXPORT_END namespace detail { template -[[nodiscard]] consteval std::remove_const_t clone_reference_with(From) +[[nodiscard]] consteval decltype(To) clone_reference_with(From) { return {}; } template -[[nodiscard]] consteval reference> clone_reference_with(reference) +[[nodiscard]] consteval reference clone_reference_with(reference) { return {}; } diff --git a/src/core/include/mp-units/framework/reference_concepts.h b/src/core/include/mp-units/framework/reference_concepts.h index 6ac2187b..a2c78365 100644 --- a/src/core/include/mp-units/framework/reference_concepts.h +++ b/src/core/include/mp-units/framework/reference_concepts.h @@ -76,7 +76,7 @@ template * the provided quantity_spec type. */ template -concept ReferenceOf = Reference && QuantitySpecOf, QS>; +concept ReferenceOf = Reference && QuantitySpecOf; MP_UNITS_EXPORT_END diff --git a/src/core/include/mp-units/framework/system_reference.h b/src/core/include/mp-units/framework/system_reference.h index 39f16bcf..0bfcabae 100644 --- a/src/core/include/mp-units/framework/system_reference.h +++ b/src/core/include/mp-units/framework/system_reference.h @@ -60,7 +60,7 @@ namespace mp_units { * @tparam CoU coherent unit for a quantity in this system */ template - requires(!AssociatedUnit>) || (CoU == one) + requires(!AssociatedUnit) || (CoU == one) struct system_reference { static constexpr auto quantity_spec = Q; static constexpr auto coherent_unit = CoU; @@ -68,9 +68,9 @@ struct system_reference { template requires(convertible(coherent_unit, U{})) #if MP_UNITS_COMP_MSVC - [[nodiscard]] constexpr decltype(reference, U>{}) operator[](U) const + [[nodiscard]] constexpr decltype(reference{}) operator[](U) const #else - [[nodiscard]] constexpr reference, U> operator[](U) const + [[nodiscard]] constexpr reference operator[](U) const #endif { return {}; diff --git a/src/core/include/mp-units/framework/unit.h b/src/core/include/mp-units/framework/unit.h index a96c043f..c00952ff 100644 --- a/src/core/include/mp-units/framework/unit.h +++ b/src/core/include/mp-units/framework/unit.h @@ -175,13 +175,13 @@ struct named_unit { */ template requires(!Symbol.empty()) -struct named_unit : std::remove_const_t { +struct named_unit : decltype(U) { static constexpr auto symbol = Symbol; ///< Unique unit identifier }; template requires(!Symbol.empty()) -struct named_unit : std::remove_const_t { +struct named_unit : decltype(U) { static constexpr auto symbol = Symbol; ///< Unique unit identifier static constexpr auto point_origin = PO; }; @@ -197,14 +197,14 @@ struct named_unit : std::remove_const_t { */ template requires(!Symbol.empty()) && (QS.dimension == detail::get_associated_quantity(U).dimension) -struct named_unit : std::remove_const_t { +struct named_unit : decltype(U) { static constexpr auto symbol = Symbol; ///< Unique unit identifier static constexpr auto quantity_spec = QS; }; template requires(!Symbol.empty()) && (QS.dimension == detail::get_associated_quantity(U).dimension) -struct named_unit : std::remove_const_t { +struct named_unit : decltype(U) { static constexpr auto symbol = Symbol; ///< Unique unit identifier static constexpr auto quantity_spec = QS; static constexpr auto point_origin = PO; @@ -234,7 +234,7 @@ struct named_unit : std::remove_const_t { */ MP_UNITS_EXPORT template requires(!Symbol.empty()) -struct prefixed_unit : std::remove_const_t { +struct prefixed_unit : decltype(M * U) { static constexpr auto symbol = Symbol + U.symbol; }; @@ -392,7 +392,7 @@ template return canonical_unit{pow(base.mag) * num.mag / den.mag, num.reference_unit / den.reference_unit}; } else { return canonical_unit{pow(base.mag), - derived_unit, Num, Den...>>{}}; + derived_unit>{}}; } } @@ -573,7 +573,7 @@ template else if constexpr (detail::ratio{Num, Den} == 1) return u; else if constexpr (detail::is_specialization_of_scaled_unit) - return scaled_unit(U::mag), std::remove_const_t(U::reference_unit))>>{}; + return scaled_unit(U::mag), decltype(pow(U::reference_unit))>{}; else if constexpr (detail::is_specialization_of_derived_unit) return detail::expr_pow(u); else if constexpr (Den == 1) @@ -659,7 +659,7 @@ template return u1; else { constexpr auto cm = detail::common_magnitude(canonical_lhs.mag, canonical_rhs.mag); - return scaled_unit>{}; + return scaled_unit{}; } } } diff --git a/src/core/include/mp-units/framework/unit_concepts.h b/src/core/include/mp-units/framework/unit_concepts.h index c536e0b4..02a00c7a 100644 --- a/src/core/include/mp-units/framework/unit_concepts.h +++ b/src/core/include/mp-units/framework/unit_concepts.h @@ -190,7 +190,7 @@ concept AssociatedUnit = Unit && detail::has_associated_quantity(U{}); */ MP_UNITS_EXPORT template concept UnitOf = - AssociatedUnit && QuantitySpec> && + AssociatedUnit && QuantitySpec && implicitly_convertible(get_quantity_spec(U{}), QS) && // the below is to make `dimensionless[radian]` invalid (get_kind(QS) == get_kind(get_quantity_spec(U{})) || !detail::NestedQuantityKindSpecOf); @@ -209,7 +209,7 @@ namespace detail { */ MP_UNITS_EXPORT template concept UnitCompatibleWith = - Unit && Unit> && QuantitySpec> && + Unit && Unit && QuantitySpec && (!AssociatedUnit || UnitOf)&&detail::have_same_canonical_reference_unit(U{}, U2); diff --git a/src/systems/include/mp-units/systems/iec80000/binary_prefixes.h b/src/systems/include/mp-units/systems/iec80000/binary_prefixes.h index bfcc9b4f..921ab90b 100644 --- a/src/systems/include/mp-units/systems/iec80000/binary_prefixes.h +++ b/src/systems/include/mp-units/systems/iec80000/binary_prefixes.h @@ -42,14 +42,14 @@ template struct yobi_ : prefixed_unit<"Yi", mag_power<2, 80>, MP_UNITS_EXPORT_BEGIN -template inline constexpr kibi_> kibi; -template inline constexpr mebi_> mebi; -template inline constexpr gibi_> gibi; -template inline constexpr tebi_> tebi; -template inline constexpr pebi_> pebi; -template inline constexpr exbi_> exbi; -template inline constexpr zebi_> zebi; -template inline constexpr yobi_> yobi; +template inline constexpr kibi_ kibi; +template inline constexpr mebi_ mebi; +template inline constexpr gibi_ gibi; +template inline constexpr tebi_ tebi; +template inline constexpr pebi_ pebi; +template inline constexpr exbi_ exbi; +template inline constexpr zebi_ zebi; +template inline constexpr yobi_ yobi; // clang-format on MP_UNITS_EXPORT_END diff --git a/src/systems/include/mp-units/systems/si/prefixes.h b/src/systems/include/mp-units/systems/si/prefixes.h index da2fb5b7..fa7bbf1f 100644 --- a/src/systems/include/mp-units/systems/si/prefixes.h +++ b/src/systems/include/mp-units/systems/si/prefixes.h @@ -58,30 +58,30 @@ template struct quetta_ : prefixed_unit<"Q", mag_power<10, 30> MP_UNITS_EXPORT_BEGIN -template inline constexpr quecto_> quecto; -template inline constexpr ronto_> ronto; -template inline constexpr yocto_> yocto; -template inline constexpr zepto_> zepto; -template inline constexpr atto_> atto; -template inline constexpr femto_> femto; -template inline constexpr pico_> pico; -template inline constexpr nano_> nano; -template inline constexpr micro_> micro; -template inline constexpr milli_> milli; -template inline constexpr centi_> centi; -template inline constexpr deci_> deci; -template inline constexpr deca_> deca; -template inline constexpr hecto_> hecto; -template inline constexpr kilo_> kilo; -template inline constexpr mega_> mega; -template inline constexpr giga_> giga; -template inline constexpr tera_> tera; -template inline constexpr peta_> peta; -template inline constexpr exa_> exa; -template inline constexpr zetta_> zetta; -template inline constexpr yotta_> yotta; -template inline constexpr ronna_> ronna; -template inline constexpr quetta_> quetta; +template inline constexpr quecto_ quecto; +template inline constexpr ronto_ ronto; +template inline constexpr yocto_ yocto; +template inline constexpr zepto_ zepto; +template inline constexpr atto_ atto; +template inline constexpr femto_ femto; +template inline constexpr pico_ pico; +template inline constexpr nano_ nano; +template inline constexpr micro_ micro; +template inline constexpr milli_ milli; +template inline constexpr centi_ centi; +template inline constexpr deci_ deci; +template inline constexpr deca_ deca; +template inline constexpr hecto_ hecto; +template inline constexpr kilo_ kilo; +template inline constexpr mega_ mega; +template inline constexpr giga_ giga; +template inline constexpr tera_ tera; +template inline constexpr peta_ peta; +template inline constexpr exa_ exa; +template inline constexpr zetta_ zetta; +template inline constexpr yotta_ yotta; +template inline constexpr ronna_ ronna; +template inline constexpr quetta_ quetta; // clang-format on MP_UNITS_EXPORT_END diff --git a/test/static/concepts_test.cpp b/test/static/concepts_test.cpp index b43ed0dd..68033efa 100644 --- a/test/static/concepts_test.cpp +++ b/test/static/concepts_test.cpp @@ -49,9 +49,9 @@ struct dim_speed : decltype(isq::dim_length / isq::dim_time) {}; // BaseDimension static_assert(detail::BaseDimension); -static_assert(!detail::BaseDimension>); -static_assert(!detail::BaseDimension>); -static_assert(!detail::BaseDimension(isq::dim_length))>>); +static_assert(!detail::BaseDimension); +static_assert(!detail::BaseDimension); +static_assert(!detail::BaseDimension(isq::dim_length))>); static_assert(!detail::BaseDimension>>); static_assert(!detail::BaseDimension); static_assert(!detail::BaseDimension>); @@ -59,9 +59,9 @@ static_assert(!detail::BaseDimension); static_assert(!detail::BaseDimension); // DerivedDimension -static_assert(detail::DerivedDimension>); -static_assert(detail::DerivedDimension>); -static_assert(detail::DerivedDimension(isq::dim_length))>>); +static_assert(detail::DerivedDimension); +static_assert(detail::DerivedDimension); +static_assert(detail::DerivedDimension(isq::dim_length))>); static_assert(detail::DerivedDimension>>); static_assert(detail::DerivedDimension); static_assert(!detail::DerivedDimension); @@ -71,9 +71,9 @@ static_assert(!detail::DerivedDimension); // Dimension static_assert(Dimension); -static_assert(Dimension>); -static_assert(Dimension>); -static_assert(Dimension(isq::dim_length))>>); +static_assert(Dimension); +static_assert(Dimension); +static_assert(Dimension(isq::dim_length))>); static_assert(Dimension>>); static_assert(Dimension); static_assert(!Dimension); @@ -90,9 +90,9 @@ struct speed : decltype(isq::length / isq::time) {}; // this is not recommended static_assert(QuantitySpec); static_assert(QuantitySpec); static_assert(QuantitySpec); -static_assert(QuantitySpec)>>); -static_assert(QuantitySpec>); -static_assert(QuantitySpec(isq::length))>>); +static_assert(QuantitySpec)>); +static_assert(QuantitySpec); +static_assert(QuantitySpec(isq::length))>); static_assert(QuantitySpec); static_assert(!QuantitySpec); static_assert(!QuantitySpec); @@ -103,8 +103,8 @@ static_assert(detail::NamedQuantitySpec); static_assert(detail::NamedQuantitySpec); static_assert(detail::NamedQuantitySpec); static_assert(!detail::NamedQuantitySpec)>>); -static_assert(!detail::NamedQuantitySpec>); -static_assert(!detail::NamedQuantitySpec(isq::length))>>); +static_assert(!detail::NamedQuantitySpec); +static_assert(!detail::NamedQuantitySpec(isq::length))>); static_assert(detail::NamedQuantitySpec); static_assert(!detail::NamedQuantitySpec); static_assert(!detail::NamedQuantitySpec); @@ -113,10 +113,10 @@ static_assert(!detail::NamedQuantitySpec); // IntermediateDerivedQuantitySpec static_assert(!detail::IntermediateDerivedQuantitySpec); static_assert(!detail::IntermediateDerivedQuantitySpec); -static_assert(!detail::IntermediateDerivedQuantitySpec)>>); +static_assert(!detail::IntermediateDerivedQuantitySpec)>); static_assert(!detail::IntermediateDerivedQuantitySpec); -static_assert(detail::IntermediateDerivedQuantitySpec>); -static_assert(detail::IntermediateDerivedQuantitySpec(isq::length))>>); +static_assert(detail::IntermediateDerivedQuantitySpec); +static_assert(detail::IntermediateDerivedQuantitySpec(isq::length))>); static_assert(!detail::IntermediateDerivedQuantitySpec); static_assert(!detail::IntermediateDerivedQuantitySpec); static_assert(!detail::IntermediateDerivedQuantitySpec); @@ -127,8 +127,8 @@ static_assert(!detail::QuantityKindSpec); static_assert(!detail::QuantityKindSpec); static_assert(detail::QuantityKindSpec)>>); static_assert(!detail::QuantityKindSpec); -static_assert(!detail::QuantityKindSpec>); -static_assert(!detail::QuantityKindSpec(isq::length))>>); +static_assert(!detail::QuantityKindSpec); +static_assert(!detail::QuantityKindSpec(isq::length))>); static_assert(!detail::QuantityKindSpec); static_assert(!detail::QuantityKindSpec); static_assert(!detail::QuantityKindSpec); @@ -142,13 +142,13 @@ struct metre_per_second : decltype(si::metre / si::second) {}; static_assert(Unit); static_assert(Unit); -static_assert(Unit)>>); +static_assert(Unit)>); static_assert(Unit); -static_assert(Unit>); -static_assert(Unit>); -static_assert(Unit * si::second)>>); -static_assert(Unit>); -static_assert(Unit(si::metre))>>); +static_assert(Unit); +static_assert(Unit); +static_assert(Unit * si::second)>); +static_assert(Unit); +static_assert(Unit(si::metre))>); static_assert(Unit); static_assert(Unit, struct si::second>>); static_assert(Unit); @@ -169,12 +169,12 @@ static_assert(!Unit); static_assert(detail::NamedUnit); static_assert(detail::NamedUnit); static_assert(!detail::NamedUnit); -static_assert(!detail::NamedUnit)>>); -static_assert(!detail::NamedUnit>); -static_assert(!detail::NamedUnit>); -static_assert(!detail::NamedUnit * si::second)>>); -static_assert(!detail::NamedUnit>); -static_assert(!detail::NamedUnit(si::metre))>>); +static_assert(!detail::NamedUnit)>); +static_assert(!detail::NamedUnit); +static_assert(!detail::NamedUnit); +static_assert(!detail::NamedUnit * si::second)>); +static_assert(!detail::NamedUnit); +static_assert(!detail::NamedUnit(si::metre))>); static_assert(detail::NamedUnit); static_assert(!detail::NamedUnit, struct si::second>>); static_assert(!detail::NamedUnit); @@ -195,12 +195,12 @@ static_assert(!detail::NamedUnit); static_assert(PrefixableUnit); static_assert(PrefixableUnit); static_assert(!PrefixableUnit); -static_assert(!PrefixableUnit)>>); -static_assert(!PrefixableUnit>); -static_assert(!PrefixableUnit>); -static_assert(!PrefixableUnit * si::second)>>); -static_assert(!PrefixableUnit>); -static_assert(!PrefixableUnit(si::metre))>>); +static_assert(!PrefixableUnit)>); +static_assert(!PrefixableUnit); +static_assert(!PrefixableUnit); +static_assert(!PrefixableUnit * si::second)>); +static_assert(!PrefixableUnit); +static_assert(!PrefixableUnit(si::metre))>); static_assert(PrefixableUnit); static_assert(!PrefixableUnit, struct si::second>>); static_assert(!PrefixableUnit); @@ -221,12 +221,12 @@ static_assert(!PrefixableUnit); static_assert(AssociatedUnit); static_assert(!AssociatedUnit); static_assert(AssociatedUnit); -static_assert(AssociatedUnit)>>); -static_assert(AssociatedUnit>); -static_assert(AssociatedUnit>); -static_assert(AssociatedUnit * si::second)>>); -static_assert(AssociatedUnit>); -static_assert(AssociatedUnit(si::metre))>>); +static_assert(AssociatedUnit)>); +static_assert(AssociatedUnit); +static_assert(AssociatedUnit); +static_assert(AssociatedUnit * si::second)>); +static_assert(AssociatedUnit); +static_assert(AssociatedUnit(si::metre))>); static_assert(AssociatedUnit); static_assert(AssociatedUnit, struct si::second>>); static_assert(AssociatedUnit); @@ -260,13 +260,13 @@ static_assert(!UnitOf); // Reference static_assert(Reference); -static_assert(Reference>); -static_assert(Reference>); -static_assert(Reference>); -static_assert(Reference>); +static_assert(Reference); +static_assert(Reference); +static_assert(Reference); +static_assert(Reference); static_assert(!Reference); static_assert(!Reference); -static_assert(!Reference)>>); +static_assert(!Reference)>); static_assert(!Reference); static_assert(!Reference); @@ -274,24 +274,24 @@ static_assert(!Reference); static_assert(ReferenceOf); static_assert(ReferenceOf); static_assert(!ReferenceOf); -static_assert(ReferenceOf, isq::length>); -static_assert(!ReferenceOf, isq::radius>); -static_assert(ReferenceOf, isq::length>); -static_assert(ReferenceOf, isq::radius>); +static_assert(ReferenceOf); +static_assert(!ReferenceOf); +static_assert(ReferenceOf); +static_assert(ReferenceOf); static_assert(!ReferenceOf); static_assert(ReferenceOf); -static_assert(ReferenceOf, dimensionless>); -static_assert(ReferenceOf, isq::rotation>); -static_assert(ReferenceOf, dimensionless>); +static_assert(ReferenceOf); +static_assert(ReferenceOf); +static_assert(ReferenceOf); static_assert(ReferenceOf); static_assert(!ReferenceOf); -static_assert(ReferenceOf, isq::angular_measure>); -static_assert(!ReferenceOf, dimensionless>); +static_assert(ReferenceOf); +static_assert(!ReferenceOf); static_assert(ReferenceOf); static_assert(ReferenceOf); -static_assert(!ReferenceOf, isq::rotation>); -static_assert(!ReferenceOf, isq::angular_measure>); +static_assert(!ReferenceOf); +static_assert(!ReferenceOf); // Representation static_assert(Representation); @@ -324,7 +324,7 @@ static_assert(Quantity>); static_assert(!Quantity); #endif static_assert(!Quantity>); -static_assert(!Quantity>); +static_assert(!Quantity); // QuantityOf static_assert(QuantityOf, isq::length>); @@ -365,7 +365,7 @@ static_assert(QuantityPoint>); static_assert(QuantityPoint>); static_assert(QuantityPoint>); static_assert(QuantityPoint>); -static_assert(!QuantityPoint>); +static_assert(!QuantityPoint); static_assert(!QuantityPoint>); static_assert(!QuantityPoint); static_assert(!QuantityPoint); @@ -405,7 +405,7 @@ static_assert(!PointOrigin>); static_assert(!PointOrigin>); static_assert(!PointOrigin>); static_assert(!PointOrigin>); -static_assert(!PointOrigin>); +static_assert(!PointOrigin); #if MP_UNITS_HOSTED static_assert(!PointOrigin); static_assert(!PointOrigin>); @@ -431,7 +431,7 @@ static_assert(!PointOriginFor, static_assert(!PointOriginFor, isq::length>); static_assert(!PointOriginFor, isq::radius>); static_assert(!PointOriginFor, isq::time>); -static_assert(!PointOriginFor, isq::length>); +static_assert(!PointOriginFor); #if MP_UNITS_HOSTED static_assert(!PointOriginFor); static_assert(!PointOriginFor, isq::length>); diff --git a/test/static/quantity_spec_test.cpp b/test/static/quantity_spec_test.cpp index 49a2d87a..7a62e5c4 100644 --- a/test/static/quantity_spec_test.cpp +++ b/test/static/quantity_spec_test.cpp @@ -121,10 +121,10 @@ static_assert(!detail::NamedQuantitySpec); static_assert(detail::IntermediateDerivedQuantitySpec); static_assert(!detail::QuantityKindSpec); -static_assert(QuantitySpec>>); -static_assert(!detail::NamedQuantitySpec>>); -static_assert(detail::IntermediateDerivedQuantitySpec>>); -static_assert(detail::QuantityKindSpec>>); +static_assert(QuantitySpec>); +static_assert(!detail::NamedQuantitySpec>); +static_assert(detail::IntermediateDerivedQuantitySpec>); +static_assert(detail::QuantityKindSpec>); static_assert(QuantitySpec / kind_of