| fn lt<'a: 'a>() -> &'a () { |
| &() |
| } |
| |
| fn lt_in_fn<'a: 'a>() -> fn(&'a ()) { |
| |_| () |
| } |
| |
| struct Contra<'a>(fn(&'a ())); |
| fn lt_in_contra<'a: 'a>() -> Contra<'a> { |
| Contra(|_| ()) |
| } |
| |
| fn covariance<'a, 'b, 'upper>(v: bool) |
| where |
| 'upper: 'a, |
| 'upper: 'b, |
| |
| { |
| let _: &'upper () = match v { |
| //~^ ERROR lifetime may not live long enough |
| //~| ERROR lifetime may not live long enough |
| true => lt::<'a>(), |
| false => lt::<'b>(), |
| }; |
| } |
| |
| fn contra_fn<'a, 'b, 'lower>(v: bool) |
| where |
| 'a: 'lower, |
| 'b: 'lower, |
| |
| { |
| |
| let _: fn(&'lower ()) = match v { |
| //~^ ERROR lifetime may not live long enough |
| true => lt_in_fn::<'a>(), |
| false => lt_in_fn::<'b>(), |
| }; |
| } |
| |
| fn contra_struct<'a, 'b, 'lower>(v: bool) |
| where |
| 'a: 'lower, |
| 'b: 'lower, |
| |
| { |
| let _: Contra<'lower> = match v { |
| //~^ ERROR lifetime may not live long enough |
| true => lt_in_contra::<'a>(), |
| false => lt_in_contra::<'b>(), |
| }; |
| } |
| |
| fn main() {} |