]> git.lizzy.rs Git - rust.git/blob - tests/ui/array-slice-vec/variance-vec-covariant.rs
Rollup merge of #104672 - Voultapher:unify-sort-modules, r=thomcc
[rust.git] / tests / ui / array-slice-vec / variance-vec-covariant.rs
1 // run-pass
2
3 // Test that vec is now covariant in its argument type.
4
5 #![allow(dead_code)]
6
7 fn foo<'a,'b>(v1: Vec<&'a i32>, v2: Vec<&'b i32>) -> i32 {
8     bar(v1, v2).cloned().unwrap_or(0) // only type checks if we can intersect 'a and 'b
9 }
10
11 fn bar<'c>(v1: Vec<&'c i32>, v2: Vec<&'c i32>) -> Option<&'c i32> {
12     v1.get(0).cloned().or_else(|| v2.get(0).cloned())
13 }
14
15 fn main() {
16     let x = 22;
17     let y = 44;
18     assert_eq!(foo(vec![&x], vec![&y]), 22);
19     assert_eq!(foo(vec![&y], vec![&x]), 44);
20 }