From 2ddbb365f38bebe6edb83f4d771f98a4469e41b5 Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Tue, 1 Aug 2023 11:59:08 +0200 Subject: [PATCH] feat: `QuantityPointOf` concept now has a special case for `absolute_point_origin` --- .../include/mp-units/bits/quantity_point_concepts.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/core/include/mp-units/bits/quantity_point_concepts.h b/src/core/include/mp-units/bits/quantity_point_concepts.h index 184864c9..a27af90b 100644 --- a/src/core/include/mp-units/bits/quantity_point_concepts.h +++ b/src/core/include/mp-units/bits/quantity_point_concepts.h @@ -37,6 +37,12 @@ namespace detail { template inline constexpr bool is_quantity_point = false; +template +inline constexpr bool is_specialization_of_absolute_point_origin = false; + +template +inline constexpr bool is_specialization_of_absolute_point_origin> = true; + template void to_base_specialization_of_absolute_point_origin(const volatile absolute_point_origin*); @@ -102,7 +108,11 @@ concept QuantityPointOf = QuantityPoint && (ReferenceOf, V> || (PointOrigin> && - std::convertible_to, std::remove_const_t>)); + (std::same_as, std::remove_const_t> || + (detail::is_specialization_of_absolute_point_origin> && + detail::is_specialization_of_absolute_point_origin> && + implicitly_convertible(QP::absolute_point_origin.quantity_spec, V.quantity_spec) && + !detail::DerivedFromQuantityKindSpecOf)))); /** * @brief A concept matching all external quantity point like types