Skip to content

Commit ba6d473

Browse files
Make various implicit conversion explicit
1 parent 6846c15 commit ba6d473

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

include/xtensor/xmath.hpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2694,9 +2694,10 @@ namespace detail {
26942694
// note: forcing copy of first axes argument -- is there a better solution?
26952695
auto axes_copy = axes;
26962696
using value_type = typename std::conditional_t<std::is_same<T, void>::value, double, T>;
2697+
using sum_type = typename std::conditional_t<std::is_same<T, void>::value, typename std::common_type_t<typename std::decay_t<E>::value_type, value_type>, T>;
26972698
// sum cannot always be a double. It could be a complex number which cannot operate on
26982699
// std::plus<double>.
2699-
return nansum<T>(sc, std::forward<X>(axes), es) / xt::cast<value_type>(count_nonnan(sc, std::move(axes_copy), es));
2700+
return nansum<sum_type>(sc, std::forward<X>(axes), es) / xt::cast<value_type>(count_nonnan(sc, std::move(axes_copy), es));
27002701
}
27012702

27022703
template <class T = void, class E, class EVS = DEFAULT_STRATEGY_REDUCERS,
@@ -2705,7 +2706,8 @@ namespace detail {
27052706
{
27062707
decltype(auto) sc = detail::shared_forward<E>(e);
27072708
using value_type = typename std::conditional_t<std::is_same<T, void>::value, double, T>;
2708-
return nansum<T>(sc, es) / xt::cast<value_type>(count_nonnan(sc, es));
2709+
using sum_type = typename std::conditional_t<std::is_same<T, void>::value, typename std::common_type_t<typename std::decay_t<E>::value_type, value_type>, T>;
2710+
return nansum<sum_type>(sc, es) / xt::cast<value_type>(count_nonnan(sc, es));
27092711
}
27102712

27112713
#ifdef X_OLD_CLANG
@@ -2776,7 +2778,7 @@ namespace detail {
27762778
keep_dim_shape[el] = 1;
27772779
}
27782780
auto mrv = reshape_view<XTENSOR_DEFAULT_LAYOUT>(std::move(inner_mean), std::move(keep_dim_shape));
2779-
return nanmean<result_type>(square(sc - std::move(mrv)), std::forward<X>(axes), es);
2781+
return nanmean<result_type>(square(cast<result_type>(sc) - std::move(mrv)), std::forward<X>(axes), es);
27802782
}
27812783

27822784
/**

0 commit comments

Comments
 (0)