]> git.lizzy.rs Git - rust.git/blob - src/test/ui/variance/variance-types-bounds.rs
Merge commit 'e329249b6a3a98830d860c74c8234a8dd9407436' into clippyup
[rust.git] / src / test / ui / variance / variance-types-bounds.rs
1 // Test that we correctly infer variance for type parameters in
2 // various types and traits.
3
4 #![feature(rustc_attrs)]
5
6 #[rustc_variance]
7 struct TestImm<A, B> { //~ ERROR [+, +]
8     x: A,
9     y: B,
10 }
11
12 #[rustc_variance]
13 struct TestMut<A, B:'static> { //~ ERROR [+, o]
14     x: A,
15     y: &'static mut B,
16 }
17
18 #[rustc_variance]
19 struct TestIndirect<A:'static, B:'static> { //~ ERROR [+, o]
20     m: TestMut<A, B>
21 }
22
23 #[rustc_variance]
24 struct TestIndirect2<A:'static, B:'static> { //~ ERROR [o, o]
25     n: TestMut<A, B>,
26     m: TestMut<B, A>
27 }
28
29 trait Getter<A> {
30     fn get(&self) -> A;
31 }
32
33 trait Setter<A> {
34     fn set(&mut self, a: A);
35 }
36
37 #[rustc_variance]
38 struct TestObject<A, R> { //~ ERROR [o, o]
39     n: Box<dyn Setter<A>+Send>,
40     m: Box<dyn Getter<R>+Send>,
41 }
42
43 fn main() {}