use std::ops::Index; struct MyVec { data: Vec, } impl Index for MyVec { type Output = T; fn index(&self, i: usize) -> &T { &self.data[i] } } fn main() { let v = MyVec::> { 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>` }