]> git.lizzy.rs Git - rust.git/blob - src/test/ui/associated-types/associated-types-subtyping-1.rs
Auto merge of #95295 - CAD97:layout-isize, r=scottmcm
[rust.git] / src / test / ui / associated-types / associated-types-subtyping-1.rs
1 #![allow(unused_variables)]
2
3 fn make_any<T>() -> T {  loop {} }
4
5 trait Trait<'a> {
6     type Type;
7
8     fn method(&'a self) { }
9 }
10
11 fn method1<'a,'b,T>(x: &'a T, y: &'b T)
12     where T : for<'z> Trait<'z>, 'a : 'b
13 {
14     // Note that &'static T <: &'a T.
15     let a: <T as Trait<'a>>::Type = make_any();
16     let b: <T as Trait<'b>>::Type = make_any();
17     let _c: <T as Trait<'a>>::Type = a;
18 }
19
20 fn method2<'a,'b,T>(x: &'a T, y: &'b T)
21     where T : for<'z> Trait<'z>, 'a : 'b
22 {
23     // Note that &'static T <: &'a T.
24     let a: <T as Trait<'a>>::Type = make_any();
25     //~^ ERROR lifetime may not live long enough
26     let b: <T as Trait<'b>>::Type = make_any();
27     let _c: <T as Trait<'b>>::Type = a;
28 }
29
30 fn method3<'a,'b,T>(x: &'a T, y: &'b T)
31     where T : for<'z> Trait<'z>, 'a : 'b
32 {
33     // Note that &'static T <: &'a T.
34     let a: <T as Trait<'a>>::Type = make_any();
35     let b: <T as Trait<'b>>::Type = make_any();
36     let _c: <T as Trait<'a>>::Type = b;
37     //~^ ERROR lifetime may not live long enough
38 }
39
40 fn method4<'a,'b,T>(x: &'a T, y: &'b T)
41     where T : for<'z> Trait<'z>, 'a : 'b
42 {
43     // Note that &'static T <: &'a T.
44     let a: <T as Trait<'a>>::Type = make_any();
45     let b: <T as Trait<'b>>::Type = make_any();
46     let _c: <T as Trait<'b>>::Type = b;
47 }
48
49 fn main() { }