diff --git a/include/smath.hpp b/include/smath.hpp index 4bacac4..245c161 100644 --- a/include/smath.hpp +++ b/include/smath.hpp @@ -577,42 +577,47 @@ using Vec2d = Vec<2, double>; using Vec3d = Vec<3, double>; using Vec4d = Vec<4, double>; -template constexpr auto deg(T const value) -> T +template constexpr auto deg(T const value) { + using R = std::common_type_t; if constexpr (detail::SMATH_ANGLE_UNIT_ID == detail::AngularUnit::Degrees) { - return value; + return static_cast(value); } else if constexpr (detail::SMATH_ANGLE_UNIT_ID == detail::AngularUnit::Radians) { - return value * static_cast(std::numbers::pi / 180.0); + return static_cast(value) * static_cast(std::numbers::pi / 180.0); } else if constexpr (detail::SMATH_ANGLE_UNIT_ID == detail::AngularUnit::Turns) { - return value / static_cast(360.0); + return static_cast(value) / static_cast(360.0); } } -template constexpr auto rad(T const value) -> T +template constexpr auto rad(T const value) { + using R = std::common_type_t; if constexpr (detail::SMATH_ANGLE_UNIT_ID == detail::AngularUnit::Degrees) { - return value * static_cast(180.0 / std::numbers::pi); + return static_cast(value) * static_cast(180.0 / std::numbers::pi); } else if constexpr (detail::SMATH_ANGLE_UNIT_ID == detail::AngularUnit::Radians) { - return value; + return static_cast(value); } else if constexpr (detail::SMATH_ANGLE_UNIT_ID == detail::AngularUnit::Turns) { - return value / (static_cast(2.0) * static_cast(std::numbers::pi)); + return static_cast(value) + / (static_cast(2.0) * static_cast(std::numbers::pi)); } } -template constexpr auto turns(T const value) -> T +template constexpr auto turns(T const value) { + using R = std::common_type_t; if constexpr (detail::SMATH_ANGLE_UNIT_ID == detail::AngularUnit::Degrees) { - return value * static_cast(360.0); + return static_cast(value) * static_cast(360.0); } else if constexpr (detail::SMATH_ANGLE_UNIT_ID == detail::AngularUnit::Radians) { - return value * (static_cast(2.0) * static_cast(std::numbers::pi)); + return static_cast(value) + * (static_cast(2.0) * static_cast(std::numbers::pi)); } else if constexpr (detail::SMATH_ANGLE_UNIT_ID == detail::AngularUnit::Turns) { - return value; + return static_cast(value); } }