diff --git a/src/core/include/mp-units/bits/quantity_concepts.h b/src/core/include/mp-units/bits/quantity_concepts.h index 7214c738..559bfc11 100644 --- a/src/core/include/mp-units/bits/quantity_concepts.h +++ b/src/core/include/mp-units/bits/quantity_concepts.h @@ -32,6 +32,10 @@ namespace mp_units { template Rep> class quantity; +template + requires quantity>::_rep_safe_constructible_ +[[nodiscard]] constexpr quantity> make_quantity(Rep&& v); + namespace detail { template @@ -74,8 +78,8 @@ concept QuantityLike = requires(T q) { requires RepresentationOf::rep, get_quantity_spec(quantity_like_traits::reference).character>; { - quantity_like_traits::value(q) - } -> std::convertible_to::rep>; + make_quantity::reference>(quantity_like_traits::value(q)) + } -> std::same_as::reference, typename quantity_like_traits::rep>>; }; } // namespace mp_units diff --git a/src/core/include/mp-units/reference.h b/src/core/include/mp-units/reference.h index 14ed6a6d..8d934206 100644 --- a/src/core/include/mp-units/reference.h +++ b/src/core/include/mp-units/reference.h @@ -29,10 +29,6 @@ namespace mp_units { -template - requires quantity>::_rep_safe_constructible_ -[[nodiscard]] constexpr quantity> make_quantity(Rep&& v); - [[nodiscard]] consteval QuantitySpec auto get_quantity_spec(AssociatedUnit auto u) { return detail::get_associated_quantity(u); diff --git a/src/utility/include/mp-units/chrono.h b/src/utility/include/mp-units/chrono.h index 88c70ce1..44e6f333 100644 --- a/src/utility/include/mp-units/chrono.h +++ b/src/utility/include/mp-units/chrono.h @@ -80,7 +80,7 @@ struct quantity_point_like_traits(); static constexpr auto point_origin = chrono_point_origin; using rep = Rep; - [[nodiscard]] static constexpr auto quantity_from_origin( + [[nodiscard]] static constexpr quantity quantity_from_origin( const std::chrono::time_point>& qp) { return quantity{qp.time_since_epoch()};