diff --git a/example/include/geographic.h b/example/include/geographic.h index 2eae3e50..b3268393 100644 --- a/example/include/geographic.h +++ b/example/include/geographic.h @@ -92,29 +92,38 @@ std::basic_ostream& operator<<(std::basic_ostream& inline namespace literals { -constexpr latitude operator"" _N(long double v) { return v * mp_units::si::degree; } -constexpr latitude operator"" _S(long double v) { return -v * mp_units::si::degree; } -constexpr longitude operator"" _E(long double v) { return v * mp_units::si::degree; } -constexpr longitude operator"" _W(long double v) { return -v * mp_units::si::degree; } +constexpr latitude operator"" _N(long double v) { return latitude{v * mp_units::si::degree}; } +constexpr latitude operator"" _S(long double v) +{ + return latitude{-v * mp_units::si::degree}; +} +constexpr longitude operator"" _E(long double v) +{ + return longitude{v * mp_units::si::degree}; +} +constexpr longitude operator"" _W(long double v) +{ + return longitude{-v * mp_units::si::degree}; +} constexpr latitude operator"" _N(unsigned long long v) { gsl_ExpectsAudit(std::in_range(v)); - return static_cast(v) * mp_units::si::degree; + return latitude{static_cast(v) * mp_units::si::degree}; } constexpr latitude operator"" _S(unsigned long long v) { gsl_ExpectsAudit(std::in_range(v)); - return -static_cast(v) * mp_units::si::degree; + return latitude{-static_cast(v) * mp_units::si::degree}; } constexpr longitude operator"" _E(unsigned long long v) { gsl_ExpectsAudit(std::in_range(v)); - return static_cast(v) * mp_units::si::degree; + return longitude{static_cast(v) * mp_units::si::degree}; } constexpr longitude operator"" _W(unsigned long long v) { gsl_ExpectsAudit(std::in_range(v)); - return -static_cast(v) * mp_units::si::degree; + return longitude{-static_cast(v) * mp_units::si::degree}; } } // namespace literals diff --git a/src/core/include/mp_units/quantity.h b/src/core/include/mp_units/quantity.h index fd719de4..4862870e 100644 --- a/src/core/include/mp_units/quantity.h +++ b/src/core/include/mp_units/quantity.h @@ -138,7 +138,8 @@ public: quantity(quantity&&) = default; template Q> - constexpr explicit(false) quantity(const Q& q) : number_(detail::sudo_cast(q).number()) + constexpr explicit(!std::convertible_to) quantity(const Q& q) : + number_(detail::sudo_cast(q).number()) { }