// run-pass #![allow(dead_code)] #![deny(unused_mut)] #[derive(Debug)] struct A {} fn init_a() -> A { A {} } #[derive(Debug)] struct B<'a> { ed: &'a mut A, } fn init_b<'a>(ed: &'a mut A) -> B<'a> { B { ed } } #[derive(Debug)] struct C<'a> { pd: &'a mut B<'a>, } fn init_c<'a>(pd: &'a mut B<'a>) -> C<'a> { C { pd } } #[derive(Debug)] struct D<'a> { sd: &'a mut C<'a>, } fn init_d<'a>(sd: &'a mut C<'a>) -> D<'a> { D { sd } } fn main() { let mut a = init_a(); let mut b = init_b(&mut a); let mut c = init_c(&mut b); let d = init_d(&mut c); println!("{:?}", d) }