forked from mpusz/mp-units
feat: quantity
converting constructor now takes into account a convertibility of a representation type
This commit is contained in:
@@ -92,29 +92,38 @@ std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>&
|
|||||||
|
|
||||||
inline namespace literals {
|
inline namespace literals {
|
||||||
|
|
||||||
constexpr latitude<long double> operator"" _N(long double v) { return v * mp_units::si::degree; }
|
constexpr latitude<long double> operator"" _N(long double v) { return latitude<long double>{v * mp_units::si::degree}; }
|
||||||
constexpr latitude<long double> operator"" _S(long double v) { return -v * mp_units::si::degree; }
|
constexpr latitude<long double> operator"" _S(long double v)
|
||||||
constexpr longitude<long double> operator"" _E(long double v) { return v * mp_units::si::degree; }
|
{
|
||||||
constexpr longitude<long double> operator"" _W(long double v) { return -v * mp_units::si::degree; }
|
return latitude<long double>{-v * mp_units::si::degree};
|
||||||
|
}
|
||||||
|
constexpr longitude<long double> operator"" _E(long double v)
|
||||||
|
{
|
||||||
|
return longitude<long double>{v * mp_units::si::degree};
|
||||||
|
}
|
||||||
|
constexpr longitude<long double> operator"" _W(long double v)
|
||||||
|
{
|
||||||
|
return longitude<long double>{-v * mp_units::si::degree};
|
||||||
|
}
|
||||||
constexpr latitude<std::int64_t> operator"" _N(unsigned long long v)
|
constexpr latitude<std::int64_t> operator"" _N(unsigned long long v)
|
||||||
{
|
{
|
||||||
gsl_ExpectsAudit(std::in_range<std::int64_t>(v));
|
gsl_ExpectsAudit(std::in_range<std::int64_t>(v));
|
||||||
return static_cast<std::int64_t>(v) * mp_units::si::degree;
|
return latitude<std::int64_t>{static_cast<std::int64_t>(v) * mp_units::si::degree};
|
||||||
}
|
}
|
||||||
constexpr latitude<std::int64_t> operator"" _S(unsigned long long v)
|
constexpr latitude<std::int64_t> operator"" _S(unsigned long long v)
|
||||||
{
|
{
|
||||||
gsl_ExpectsAudit(std::in_range<std::int64_t>(v));
|
gsl_ExpectsAudit(std::in_range<std::int64_t>(v));
|
||||||
return -static_cast<std::int64_t>(v) * mp_units::si::degree;
|
return latitude<std::int64_t>{-static_cast<std::int64_t>(v) * mp_units::si::degree};
|
||||||
}
|
}
|
||||||
constexpr longitude<std::int64_t> operator"" _E(unsigned long long v)
|
constexpr longitude<std::int64_t> operator"" _E(unsigned long long v)
|
||||||
{
|
{
|
||||||
gsl_ExpectsAudit(std::in_range<std::int64_t>(v));
|
gsl_ExpectsAudit(std::in_range<std::int64_t>(v));
|
||||||
return static_cast<std::int64_t>(v) * mp_units::si::degree;
|
return longitude<std::int64_t>{static_cast<std::int64_t>(v) * mp_units::si::degree};
|
||||||
}
|
}
|
||||||
constexpr longitude<std::int64_t> operator"" _W(unsigned long long v)
|
constexpr longitude<std::int64_t> operator"" _W(unsigned long long v)
|
||||||
{
|
{
|
||||||
gsl_ExpectsAudit(std::in_range<std::int64_t>(v));
|
gsl_ExpectsAudit(std::in_range<std::int64_t>(v));
|
||||||
return -static_cast<std::int64_t>(v) * mp_units::si::degree;
|
return longitude<std::int64_t>{-static_cast<std::int64_t>(v) * mp_units::si::degree};
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace literals
|
} // namespace literals
|
||||||
|
@@ -138,7 +138,8 @@ public:
|
|||||||
quantity(quantity&&) = default;
|
quantity(quantity&&) = default;
|
||||||
|
|
||||||
template<detail::QuantityConvertibleTo<quantity> Q>
|
template<detail::QuantityConvertibleTo<quantity> Q>
|
||||||
constexpr explicit(false) quantity(const Q& q) : number_(detail::sudo_cast<quantity>(q).number())
|
constexpr explicit(!std::convertible_to<typename Q::rep, Rep>) quantity(const Q& q) :
|
||||||
|
number_(detail::sudo_cast<quantity>(q).number())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user