template Matrix operator*(const Matrix &m1, const Matrix &m2) { if (m1.numberOfColumns() != m2.numberOfRows()) { throw MatrixException(); } Matrix ans(Uninitialized{}, m1.numberOfRows(), m2.numberOfColumns()); for (int i = 1; i <= m1.numberOfRows(); i++) { for (int j = 1; j <= m2.numberOfColumns(); j++) { T tmp{}; for (int k = 1; k <= m1.numberOfColumns(); k++) { tmp += m1(i, k) * m2(k, j); } ans(i, j) = tmp; } } return ans; }