#![allow(unused_variables)] fn make_any() -> T { loop {} } trait Trait<'a> { type Type; fn method(&'a self) { } } fn method1<'a,'b,T>(x: &'a T, y: &'b T) where T : for<'z> Trait<'z>, 'a : 'b { // Note that &'static T <: &'a T. let a: >::Type = make_any(); let b: >::Type = make_any(); let _c: >::Type = a; } fn method2<'a,'b,T>(x: &'a T, y: &'b T) where T : for<'z> Trait<'z>, 'a : 'b { // Note that &'static T <: &'a T. let a: >::Type = make_any(); //~^ ERROR lifetime may not live long enough let b: >::Type = make_any(); let _c: >::Type = a; } fn method3<'a,'b,T>(x: &'a T, y: &'b T) where T : for<'z> Trait<'z>, 'a : 'b { // Note that &'static T <: &'a T. let a: >::Type = make_any(); let b: >::Type = make_any(); let _c: >::Type = b; //~^ ERROR lifetime may not live long enough } fn method4<'a,'b,T>(x: &'a T, y: &'b T) where T : for<'z> Trait<'z>, 'a : 'b { // Note that &'static T <: &'a T. let a: >::Type = make_any(); let b: >::Type = make_any(); let _c: >::Type = b; } fn main() { }