// 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) | |
} |