pow<N>() fixed to work with the integral representations

This commit is contained in:
Mateusz Pusz
2019-09-24 16:59:45 +02:00
parent 0cffcf7849
commit ad69f338b8
2 changed files with 7 additions and 4 deletions

View File

@@ -32,7 +32,7 @@ namespace units {
{ {
using dim = dimension_pow_t<typename U::dimension, N>; using dim = dimension_pow_t<typename U::dimension, N>;
using r = ratio_pow<typename U::ratio, N>; using r = ratio_pow<typename U::ratio, N>;
return quantity<downcast_traits_t<unit<dim, r>>, Rep>(std::pow(q.count(), N)); return quantity<downcast_traits_t<unit<dim, r>>, Rep>(static_cast<Rep>(std::pow(q.count(), N)));
} }
template<typename U, typename Rep> template<typename U, typename Rep>
@@ -40,7 +40,7 @@ namespace units {
{ {
using dim = dimension_sqrt_t<typename U::dimension>; using dim = dimension_sqrt_t<typename U::dimension>;
using r = ratio_sqrt<typename U::ratio>; using r = ratio_sqrt<typename U::ratio>;
return quantity<downcast_traits_t<unit<dim, r>>, Rep>(std::sqrt(q.count())); return quantity<downcast_traits_t<unit<dim, r>>, Rep>(static_cast<Rep>(std::sqrt(q.count())));
} }
} // namespace units } // namespace units

View File

@@ -22,6 +22,8 @@
#include "units/dimensions/velocity.h" #include "units/dimensions/velocity.h"
#include "units/dimensions/frequency.h" #include "units/dimensions/frequency.h"
#include "units/dimensions/area.h"
#include "units/math.h"
#include <utility> #include <utility>
#include <chrono> #include <chrono>
@@ -130,8 +132,7 @@ namespace {
static_assert([]() { static_assert([]() {
quantity<metre, int> l1(1), l2(2); quantity<metre, int> l1(1), l2(2);
return l2 = l1; return l2 = l1;
}() }().count() == 1);
.count() == 1);
// static member functions // static member functions
@@ -281,4 +282,6 @@ namespace {
static_assert(2kmph * 2h == 4km); static_assert(2kmph * 2h == 4km);
static_assert(2km / 2kmph == 1h); static_assert(2km / 2kmph == 1h);
static_assert(std::is_same_v<decltype(pow<2>(2m)), decltype(4sq_m)>);
} // namespace } // namespace