diff --git a/include/armadillo_bits/subview_meat.hpp b/include/armadillo_bits/subview_meat.hpp index b990b01d..44014046 100644 --- a/include/armadillo_bits/subview_meat.hpp +++ b/include/armadillo_bits/subview_meat.hpp @@ -3361,11 +3361,22 @@ template template inline void -subview_col::operator=(const Base& X) +subview_col::operator=(const Base& expr) { arma_debug_sigprint(); - subview::operator=(X); + if( (is_Mat::value || is_Mat::stored_type>::value) && (Proxy::has_subview == false) && (quasi_unwrap::has_subview == false) ) + { + const quasi_unwrap U(expr.get_ref()); + + arma_conform_assert_same_size(subview::n_rows, uword(1), U.M.n_rows, U.M.n_cols, "copy into submatrix"); + + arrayops::copy(const_cast(colmem), U.M.memptr(), subview::n_rows); + } + else + { + subview::operator=(expr); + } }