mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-01 19:34:29 +02:00
@@ -314,25 +314,13 @@ public:
|
|||||||
convert_explicitly> ||
|
convert_explicitly> ||
|
||||||
!std::convertible_to<Rep, typename quantity_like_traits<Q>::rep>) constexpr
|
!std::convertible_to<Rep, typename quantity_like_traits<Q>::rep>) constexpr
|
||||||
// NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions)
|
// NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions)
|
||||||
operator Q_() const& noexcept(
|
operator Q_() const
|
||||||
noexcept(quantity_like_traits<Q>::from_numerical_value(numerical_value_is_an_implementation_detail_)) &&
|
noexcept(noexcept(quantity_like_traits<Q>::from_numerical_value(numerical_value_is_an_implementation_detail_)) &&
|
||||||
std::is_nothrow_copy_constructible_v<rep>)
|
std::is_nothrow_copy_constructible_v<rep>)
|
||||||
{
|
{
|
||||||
return quantity_like_traits<Q>::from_numerical_value(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;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// member unary operators
|
// 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::months{1}} == 2629746 * s);
|
||||||
static_assert(quantity{std::chrono::years{1}} == 31556952 * 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
|
// operators
|
||||||
static_assert(quantity{1s} + 1 * s == 2 * s);
|
static_assert(quantity{1s} + 1 * s == 2 * s);
|
||||||
static_assert(quantity{1s} + 1 * min == 61 * s);
|
static_assert(quantity{1s} + 1 * min == 61 * s);
|
||||||
|
Reference in New Issue
Block a user