use std::ops::Deref; | |
trait MyTrait: Deref<Target = u32> {} | |
struct MyStruct(u32); | |
impl MyTrait for MyStruct {} | |
impl Deref for MyStruct { | |
type Target = u32; | |
fn deref(&self) -> &Self::Target { | |
&self.0 | |
} | |
} | |
fn get_concrete_value(i: u32) -> MyStruct { | |
MyStruct(i) | |
} | |
fn get_boxed_value(i: u32) -> Box<dyn MyTrait> { | |
Box::new(get_concrete_value(i)) | |
} | |
fn main() { | |
let v = [1, 2, 3] | |
.iter() | |
.map(|i| get_boxed_value(*i)) | |
.collect::<Vec<_>>(); | |
let el = &v[0]; | |
for _ in v { | |
//~^ ERROR cannot move out of `v` because it is borrowed | |
println!("{}", ***el > 0); | |
} | |
} |