Why isn't this working? I assume it has to do with the fact that I'm taking two Box<[&T]> and outputting a Box<[T]>, but wouldn't it automatically perform dereferencing if T has the Copy trait?

```
use std::ops::Add;
fn main() {
let a = Matrix::new(&[2, 1, -2, 4], 2);
let b = Matrix::new(&[-1, -3, 0, 2], 2);
println!("{:?}", a + b);
}
#[derive(Debug)]
pub struct Matrix<T> {
data: Box<[T]>,
width: usize,
}
impl<T> Matrix<T> {
pub fn new(data: impl IntoIterator<Item = T>, width: usize) -> Self {
let data: Box<[T]> = data.into_iter().collect();
assert!(data.len() % width == 0);
Matrix { data, width }
}
}
impl<'a, 'b, T: Add<Output = T> + Copy> Add<&'b Matrix<T>> for &'a Matrix<T> {
type Output = Matrix<T>;
fn add(self, rhs: &'b Matrix<T>) -> Matrix<T> {
Matrix::new(
self.data
.into_iter()
.zip(rhs.data.into_iter())
.map(|(u, v)| *u + *v),
self.width,
)
}
}
```