|  | #![allow(dead_code)] | 
|  |  | 
|  | // Test that even when `T` is only used in contravariant position, it | 
|  | // is treated as invariant. | 
|  |  | 
|  | trait Get<T> { | 
|  | fn get(&self, t: T); | 
|  | } | 
|  |  | 
|  | fn get_min_from_max<'min, 'max, G>() | 
|  | where 'max : 'min, G : Get<&'max i32> | 
|  | { | 
|  | impls_get::<G,&'min i32>() | 
|  | //~^ ERROR lifetime may not live long enough | 
|  | } | 
|  |  | 
|  | fn get_max_from_min<'min, 'max, G>() | 
|  | where 'max : 'min, G : Get<&'min i32> | 
|  | { | 
|  | // Previously OK, but now an error because traits are invariant: | 
|  |  | 
|  | impls_get::<G,&'max i32>() | 
|  | //~^ ERROR lifetime may not live long enough | 
|  | } | 
|  |  | 
|  | fn impls_get<G,T>() where G : Get<T> { } | 
|  |  | 
|  | fn main() { } |