mirror of
https://github.com/mpusz/mp-units.git
synced 2025-07-31 19:04:27 +02:00
@@ -314,25 +314,13 @@ public:
|
||||
convert_explicitly> ||
|
||||
!std::convertible_to<Rep, typename quantity_like_traits<Q>::rep>) constexpr
|
||||
// NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions)
|
||||
operator Q_() const& noexcept(
|
||||
noexcept(quantity_like_traits<Q>::from_numerical_value(numerical_value_is_an_implementation_detail_)) &&
|
||||
std::is_nothrow_copy_constructible_v<rep>)
|
||||
operator Q_() const
|
||||
noexcept(noexcept(quantity_like_traits<Q>::from_numerical_value(numerical_value_is_an_implementation_detail_)) &&
|
||||
std::is_nothrow_copy_constructible_v<rep>)
|
||||
{
|
||||
return quantity_like_traits<Q>::from_numerical_value(numerical_value_is_an_implementation_detail_).value;
|
||||
}
|
||||
|
||||
template<typename Q_, QuantityLike Q = std::remove_cvref_t<Q_>>
|
||||
requires detail::QuantityConvertibleTo<quantity, detail::quantity_like_type<Q>>
|
||||
[[nodiscard]] explicit(is_specialization_of<decltype(quantity_like_traits<Q>::from_numerical_value(
|
||||
numerical_value_is_an_implementation_detail_)),
|
||||
convert_explicitly> ||
|
||||
!std::convertible_to<Rep, typename quantity_like_traits<Q>::rep>) constexpr
|
||||
// NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions)
|
||||
operator Q_() && noexcept(
|
||||
noexcept(quantity_like_traits<Q>::from_numerical_value(numerical_value_is_an_implementation_detail_)) &&
|
||||
std::is_nothrow_move_constructible_v<rep>)
|
||||
{
|
||||
return quantity_like_traits<Q>::from_numerical_value(std::move(numerical_value_is_an_implementation_detail_)).value;
|
||||
return quantity_like_traits<Q>::from_numerical_value(
|
||||
numerical_value_in(get_unit(quantity_like_traits<Q>::reference)))
|
||||
.value;
|
||||
}
|
||||
|
||||
// member unary operators
|
||||
|
@@ -127,6 +127,15 @@ static_assert(quantity{std::chrono::weeks{1}} == 7 * d);
|
||||
static_assert(quantity{std::chrono::months{1}} == 2629746 * s);
|
||||
static_assert(quantity{std::chrono::years{1}} == 31556952 * s);
|
||||
|
||||
// conversion from chrono
|
||||
static_assert(quantity<ns>{1ns} == 1 * ns);
|
||||
static_assert(quantity<ns>{1s} == 1 * s);
|
||||
static_assert(quantity<s>{1ms} == 1 * ms);
|
||||
|
||||
// conversion to chrono
|
||||
static_assert(std::chrono::nanoseconds(quantity{1 * ns}) == 1ns);
|
||||
static_assert(std::chrono::nanoseconds(quantity{1 * s}) == 1s);
|
||||
|
||||
// operators
|
||||
static_assert(quantity{1s} + 1 * s == 2 * s);
|
||||
static_assert(quantity{1s} + 1 * min == 61 * s);
|
||||
|
Reference in New Issue
Block a user