diff --git a/corsika/framework/units/quantity.hpp b/corsika/framework/units/quantity.hpp index 5430fa398b9f7caae3182dce488ab8ea3ced9aaf..7b5bd35877b755fe1d751965975c148d42a8f20e 100644 --- a/corsika/framework/units/quantity.hpp +++ b/corsika/framework/units/quantity.hpp @@ -468,6 +468,9 @@ namespace phys { template <typename D, typename X> friend detail::Root<D, 2, X> sqrt(quantity<D, X> const& x); + template <typename D, typename X> + friend detail::Root<D, 3, X> cbrt(quantity<D, X> const& x); + // comparison template <typename D, typename X, typename Y> @@ -679,6 +682,16 @@ namespace phys { return detail::Root<D, 2, X>(std::sqrt(x.m_value)); } + /// cubic root. + + template <typename D, typename X> + detail::Root<D, 3, X> cbrt(quantity<D, X> const& x) { + static_assert(detail::root<D, 3, X>::all_even_multiples, + "root result dimensions must be integral"); + + return detail::Root<D, 3, X>(std::cbrt(x.m_value)); + } + // Comparison operators /// equality.