]>
git.proxmox.com Git - rustc.git/blob - src/test/ui/traits/trait-upcasting/struct.rs
3 #![feature(trait_upcasting)]
8 trait Foo
: PartialEq
<i32> + std
::fmt
::Debug
+ Send
+ Sync
{
59 let baz
: Box
<dyn Baz
> = v
.clone();
61 assert_eq
!(baz
.a(), 100);
62 assert_eq
!(baz
.b(), 200);
63 assert_eq
!(baz
.c(), 300);
64 assert_eq
!(baz
.z(), 11);
65 assert_eq
!(baz
.y(), 12);
66 assert_eq
!(baz
.w(), 21);
68 let baz
: Box
<dyn Baz
> = v
.clone();
69 let bar
: Box
<dyn Bar
> = baz
;
71 assert_eq
!(bar
.a(), 100);
72 assert_eq
!(bar
.b(), 200);
73 assert_eq
!(bar
.z(), 11);
74 assert_eq
!(bar
.y(), 12);
75 assert_eq
!(bar
.w(), 21);
77 let baz
: Box
<dyn Baz
> = v
.clone();
78 let foo
: Box
<dyn Foo
> = baz
;
80 assert_eq
!(foo
.a(), 100);
81 assert_eq
!(foo
.z(), 11);
82 assert_eq
!(foo
.y(), 12);
84 let baz
: Box
<dyn Baz
> = v
.clone();
85 let bar
: Box
<dyn Bar
> = baz
;
86 let foo
: Box
<dyn Foo
> = bar
;
88 assert_eq
!(foo
.a(), 100);
89 assert_eq
!(foo
.z(), 11);
90 assert_eq
!(foo
.y(), 12);
96 let baz
: Rc
<dyn Baz
> = v
.clone();
98 assert_eq
!(baz
.a(), 100);
99 assert_eq
!(baz
.b(), 200);
100 assert_eq
!(baz
.c(), 300);
101 assert_eq
!(baz
.z(), 11);
102 assert_eq
!(baz
.y(), 12);
103 assert_eq
!(baz
.w(), 21);
105 let baz
: Rc
<dyn Baz
> = v
.clone();
106 let bar
: Rc
<dyn Bar
> = baz
;
108 assert_eq
!(bar
.a(), 100);
109 assert_eq
!(bar
.b(), 200);
110 assert_eq
!(bar
.z(), 11);
111 assert_eq
!(bar
.y(), 12);
112 assert_eq
!(bar
.w(), 21);
114 let baz
: Rc
<dyn Baz
> = v
.clone();
115 let foo
: Rc
<dyn Foo
> = baz
;
117 assert_eq
!(foo
.a(), 100);
118 assert_eq
!(foo
.z(), 11);
119 assert_eq
!(foo
.y(), 12);
121 let baz
: Rc
<dyn Baz
> = v
.clone();
122 let bar
: Rc
<dyn Bar
> = baz
;
123 let foo
: Rc
<dyn Foo
> = bar
;
125 assert_eq
!(foo
.a(), 100);
126 assert_eq
!(foo
.z(), 11);
127 assert_eq
!(foo
.y(), 12);
128 assert_eq
!(foo
.z(), 11);
129 assert_eq
!(foo
.y(), 12);
135 let baz
: Arc
<dyn Baz
> = v
.clone();
137 assert_eq
!(baz
.a(), 100);
138 assert_eq
!(baz
.b(), 200);
139 assert_eq
!(baz
.c(), 300);
140 assert_eq
!(baz
.z(), 11);
141 assert_eq
!(baz
.y(), 12);
142 assert_eq
!(baz
.w(), 21);
144 let baz
: Arc
<dyn Baz
> = v
.clone();
145 let bar
: Arc
<dyn Bar
> = baz
;
147 assert_eq
!(bar
.a(), 100);
148 assert_eq
!(bar
.b(), 200);
149 assert_eq
!(bar
.z(), 11);
150 assert_eq
!(bar
.y(), 12);
151 assert_eq
!(bar
.w(), 21);
153 let baz
: Arc
<dyn Baz
> = v
.clone();
154 let foo
: Arc
<dyn Foo
> = baz
;
156 assert_eq
!(foo
.a(), 100);
157 assert_eq
!(foo
.z(), 11);
158 assert_eq
!(foo
.y(), 12);
160 let baz
: Arc
<dyn Baz
> = v
.clone();
161 let bar
: Arc
<dyn Bar
> = baz
;
162 let foo
: Arc
<dyn Foo
> = bar
;
164 assert_eq
!(foo
.a(), 100);
165 assert_eq
!(foo
.z(), 11);
166 assert_eq
!(foo
.y(), 12);