constexpr auto operator*(matrix_type<S1> m1, matrix_type<S2> m2) { auto storage = fmap( [=](auto row) { return zip_with( scalar_prod, repeat_n(m2.ncolumns(), row), columns(m2)); } , rows(m1)); return matrix_type<decltype(storage)>{storage}; }