| //@ run-pass |
| // Test that the lifetime of the enclosing `&` is used for the object |
| // lifetime bound. |
| |
| //@ pretty-expanded FIXME #23616 |
| |
| #![allow(dead_code)] |
| |
| use std::fmt::Display; |
| |
| trait Test { |
| fn foo(&self) { } |
| } |
| |
| struct SomeStruct<'a> { |
| t: &'a dyn Test, |
| u: &'a (dyn Test+'a), |
| } |
| |
| fn a<'a>(t: &'a dyn Test, mut ss: SomeStruct<'a>) { |
| ss.t = t; |
| } |
| |
| fn b<'a>(t: &'a dyn Test, mut ss: SomeStruct<'a>) { |
| ss.u = t; |
| } |
| |
| fn c<'a>(t: &'a (dyn Test+'a), mut ss: SomeStruct<'a>) { |
| ss.t = t; |
| } |
| |
| fn d<'a>(t: &'a (dyn Test+'a), mut ss: SomeStruct<'a>) { |
| ss.u = t; |
| } |
| |
| fn e<'a>(_: &'a (dyn Display+'static)) {} |
| |
| fn main() { |
| // Inside a function body, we can just infer both |
| // lifetimes, to allow &'tmp (Display+'static). |
| e(&0 as &dyn Display); |
| } |