| // Issue #12470. | |
| trait X { | |
| fn get_i(&self) -> isize; | |
| } | |
| struct B { | |
| i: isize | |
| } | |
| impl X for B { | |
| fn get_i(&self) -> isize { | |
| self.i | |
| } | |
| } | |
| impl Drop for B { | |
| fn drop(&mut self) { | |
| println!("drop"); | |
| } | |
| } | |
| struct A<'r> { | |
| p: &'r (dyn X + 'r) | |
| } | |
| fn make_a(p: &dyn X) -> A { | |
| A{p:p} | |
| } | |
| fn make_make_a<'a>() -> A<'a> { | |
| let b: Box<B> = Box::new(B { | |
| i: 1, | |
| }); | |
| let bb: &B = &*b; | |
| make_a(bb) //~ ERROR cannot return value referencing local data `*b` | |
| } | |
| fn main() { | |
| let a = make_make_a(); | |
| println!("{}", a.p.get_i()); | |
| } |