use std::ops::Index; struct MyVec<T> { data: Vec<T>, } impl<T> Index<usize> for MyVec<T> { type Output = T; fn index(&self, i: usize) -> &T { &self.data[i] } } fn main() { let v = MyVec::<Box<_>> { data: vec![Box::new(1), Box::new(2), Box::new(3)] }; let good = &v[0]; // Shouldn't fail here let bad = v[0]; //~^ ERROR cannot move out of index of `MyVec<Box<i32>>` }