1 #![feature(trait_upcasting)]
3 trait Foo<'a>: Bar<'a, 'a> {}
5 fn get_b(&self) -> Option<&'a u32> {
10 fn test_correct(x: &dyn Foo<'static>) {
11 let _ = x as &dyn Bar<'static, 'static>;
14 fn test_wrong1<'a>(x: &dyn Foo<'static>, y: &'a u32) {
15 let _ = x as &dyn Bar<'static, 'a>; // Error
16 //~^ ERROR lifetime may not live long enough
19 fn test_wrong2<'a>(x: &dyn Foo<'static>, y: &'a u32) {
20 let _ = x as &dyn Bar<'a, 'static>; // Error
21 //~^ ERROR lifetime may not live long enough
24 fn test_wrong3<'a>(x: &dyn Foo<'a>) -> Option<&'static u32> {
25 let y = x as &dyn Bar<'_, '_>;
27 //~^ ERROR lifetime may not live long enough
30 fn test_wrong4<'a>(x: &dyn Foo<'a>) -> Option<&'static u32> {
31 <_ as Bar>::get_b(x) // ERROR
32 //~^ ERROR lifetime may not live long enough
35 fn test_wrong5<'a>(x: &dyn Foo<'a>) -> Option<&'static u32> {
36 <_ as Bar<'_, '_>>::get_b(x) // ERROR
37 //~^ ERROR lifetime may not live long enough
40 fn test_wrong6<'a>(x: &dyn Foo<'a>) -> Option<&'static u32> {
41 let y = x as &dyn Bar<'_, '_>;
45 //~^ ERROR lifetime may not live long enough