]>
git.proxmox.com Git - rustc.git/blob - src/test/compile-fail/variance-trait-matching.rs
1 // Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
13 // Get<T> is covariant in T
18 struct Cloner
<T
:Clone
> {
22 impl<T
:Clone
> Get
<T
> for Cloner
<T
> {
28 fn get
<'a
, G
>(get
: &G
) -> i32
29 where G
: Get
<&'a
i32>
31 // This fails to type-check because, without variance, we can't
32 // use `G : Get<&'a i32>` as evidence that `G : Get<&'b i32>`,
34 pick(get
, &22) //~ ERROR cannot infer
37 fn pick
<'b
, G
>(get
: &'b G
, if_odd
: &'b
i32) -> i32
38 where G
: Get
<&'b
i32>
41 if v
% 2 != 0 { v }
else { *if_odd }
45 let x
= Cloner { t: &23 }
;