diff --git a/include/xtensor/xview.hpp b/include/xtensor/xview.hpp index 89a05102b..a632adcaa 100644 --- a/include/xtensor/xview.hpp +++ b/include/xtensor/xview.hpp @@ -202,7 +202,7 @@ namespace xt mutable strides_type m_strides; mutable bool m_strides_computed; - void compute_strides() const; + strides_type compute_strides() const; template ::size_type... I, class... Args> reference access_impl(std::index_sequence, Args... args); @@ -618,7 +618,8 @@ namespace xt { if (!m_strides_computed) { - compute_strides(); + m_strides = compute_strides(); + m_strides_computed = true; } return m_strides; } @@ -716,9 +717,9 @@ namespace xt //@} template - inline void xview::compute_strides() const + inline auto xview::compute_strides() const -> strides_type { - m_strides = xtl::make_sequence(dimension(), 0); + strides_type strides = xtl::make_sequence(dimension(), 0); auto func = [](const auto& s) { return xt::step_size(s); }; size_type i = 0, idx; @@ -730,14 +731,13 @@ namespace xt { break; } - m_strides[i] = m_e.strides()[idx - newaxis_count_before(i)] * apply(idx, func, m_slices); + strides[i] = m_e.strides()[idx - newaxis_count_before(i)] * apply(idx, func, m_slices); } - for (; i < m_strides.size(); ++i) + for (; i < strides.size(); ++i) { - m_strides[i] = m_e.strides()[idx++]; + strides[i] = m_e.strides()[idx++]; } - - m_strides_computed = true; + return strides; } template