1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
// run-pass
// check-run-results
// revisions: twenty_eighteen twenty_twentyone
// [twenty_eighteen]compile-flags: --edition 2018
// [twenty_twentyone]compile-flags: --edition 2021
#[derive(Debug)]
struct Dropable(&'static str);
impl Drop for Dropable {
fn drop(&mut self) {
println!("Dropping {}", self.0)
}
}
#[derive(Debug)]
struct A {
x: Dropable,
y: Dropable,
}
#[derive(Debug)]
struct B {
c: A,
d: A,
}
#[derive(Debug)]
struct R<'a> {
c: &'a A,
d: &'a A,
}
fn main() {
let a = A { x: Dropable("x"), y: Dropable("y") };
let c = move || println!("{:?} {:?}", a.y, a.x);
c();
let b = B {
c: A { x: Dropable("b.c.x"), y: Dropable("b.c.y") },
d: A { x: Dropable("b.d.x"), y: Dropable("b.d.y") },
};
let d = move || println!("{:?} {:?} {:?} {:?}", b.d.y, b.d.x, b.c.y, b.c.x);
d();
let r = R {
c: &A { x: Dropable("r.c.x"), y: Dropable("r.c.y") },
d: &A { x: Dropable("r.d.x"), y: Dropable("r.d.y") },
};
let e = move || println!("{:?} {:?} {:?} {:?}", r.d.y, r.d.x, r.c.y, r.c.x);
e();
}
|