mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-04 04:44:27 +02:00
@@ -136,13 +136,13 @@ public:
|
|||||||
explicit(!(is_same_v<dimension, dim_one> && is_same_v<unit, ::units::one>))
|
explicit(!(is_same_v<dimension, dim_one> && is_same_v<unit, ::units::one>))
|
||||||
constexpr quantity(const Value& v) : value_(static_cast<rep>(v)) {}
|
constexpr quantity(const Value& v) : value_(static_cast<rep>(v)) {}
|
||||||
|
|
||||||
template<QuantityLike Q>
|
|
||||||
requires std::same_as<quantity, quantity_like_type<Q>>
|
|
||||||
explicit constexpr quantity(const Q& q) : value_(q.count()) {}
|
|
||||||
|
|
||||||
template<safe_castable_to_<quantity> Q>
|
template<safe_castable_to_<quantity> Q>
|
||||||
constexpr quantity(const Q& q) : value_(quantity_cast<quantity>(q).count()) {}
|
constexpr quantity(const Q& q) : value_(quantity_cast<quantity>(q).count()) {}
|
||||||
|
|
||||||
|
template<QuantityLike Q>
|
||||||
|
requires safe_castable_to_<quantity_like_type<Q>, quantity>
|
||||||
|
explicit constexpr quantity(const Q& q) : quantity(quantity_like_type<Q>(quantity_like_traits<Q>::count(q))) {}
|
||||||
|
|
||||||
quantity& operator=(const quantity&) = default;
|
quantity& operator=(const quantity&) = default;
|
||||||
quantity& operator=(quantity&&) = default;
|
quantity& operator=(quantity&&) = default;
|
||||||
|
|
||||||
|
@@ -32,16 +32,25 @@ using namespace units::physical::si::literals;
|
|||||||
using namespace std::chrono_literals;
|
using namespace std::chrono_literals;
|
||||||
|
|
||||||
|
|
||||||
// construction
|
// construction - same rep type
|
||||||
static_assert(std::constructible_from<si::time<si::second, std::chrono::seconds::rep>, std::chrono::seconds>);
|
static_assert(std::constructible_from<si::time<si::second, std::chrono::seconds::rep>, std::chrono::seconds>);
|
||||||
static_assert(!std::convertible_to<std::chrono::seconds, si::time<si::second, std::chrono::seconds::rep>>);
|
static_assert(!std::convertible_to<std::chrono::seconds, si::time<si::second, std::chrono::seconds::rep>>);
|
||||||
static_assert(std::constructible_from<si::time<si::hour, std::chrono::hours::rep>, std::chrono::hours>);
|
static_assert(std::constructible_from<si::time<si::hour, std::chrono::hours::rep>, std::chrono::hours>);
|
||||||
static_assert(!std::convertible_to<std::chrono::hours, si::time<si::hour, std::chrono::hours::rep>>);
|
static_assert(!std::convertible_to<std::chrono::hours, si::time<si::hour, std::chrono::hours::rep>>);
|
||||||
static_assert(!std::constructible_from<si::time<si::second, std::chrono::hours::rep>, std::chrono::hours>);
|
static_assert(std::constructible_from<si::time<si::second, std::chrono::hours::rep>, std::chrono::hours>);
|
||||||
static_assert(!std::convertible_to<std::chrono::hours, si::time<si::second, std::chrono::hours::rep>>);
|
static_assert(!std::convertible_to<std::chrono::hours, si::time<si::second, std::chrono::hours::rep>>);
|
||||||
static_assert(!std::constructible_from<si::time<si::hour, std::chrono::seconds::rep>, std::chrono::seconds>);
|
static_assert(!std::constructible_from<si::time<si::hour, std::chrono::seconds::rep>, std::chrono::seconds>);
|
||||||
static_assert(!std::convertible_to<std::chrono::seconds, si::time<si::hour, std::chrono::seconds::rep>>);
|
static_assert(!std::convertible_to<std::chrono::seconds, si::time<si::hour, std::chrono::seconds::rep>>);
|
||||||
|
|
||||||
|
// construction - different rep type (integral to a floating-point)
|
||||||
|
static_assert(std::constructible_from<si::time<si::second>, std::chrono::seconds>);
|
||||||
|
static_assert(!std::convertible_to<std::chrono::seconds, si::time<si::second>>);
|
||||||
|
static_assert(std::constructible_from<si::time<si::second>, std::chrono::hours>);
|
||||||
|
static_assert(!std::convertible_to<std::chrono::hours, si::time<si::second>>);
|
||||||
|
static_assert(std::constructible_from<si::time<si::hour>, std::chrono::seconds>);
|
||||||
|
static_assert(!std::convertible_to<std::chrono::seconds, si::time<si::hour>>);
|
||||||
|
|
||||||
|
|
||||||
// CTAD
|
// CTAD
|
||||||
static_assert(is_same_v<decltype(quantity{1s}), si::time<si::second, std::chrono::seconds::rep>>);
|
static_assert(is_same_v<decltype(quantity{1s}), si::time<si::second, std::chrono::seconds::rep>>);
|
||||||
static_assert(is_same_v<decltype(quantity{1h}), si::time<si::hour, std::chrono::hours::rep>>);
|
static_assert(is_same_v<decltype(quantity{1h}), si::time<si::hour, std::chrono::hours::rep>>);
|
||||||
|
Reference in New Issue
Block a user