There are impl Mul<i32> for Matrix and impl Mul<Matrix> for i32 which forwards to first impl. These methods take Matrix by value. However, implementations of these methods requires only reference to Matrix, so it should be possible to write impl<'a> Mul<i32> for &'a Matrix and impl<'a> Mul<&'a Matrix> for i32 respectively.