| //@ run-pass |
| // Test that even with prior inferred parameters, object lifetimes of objects after are still |
| // valid. |
| |
| //@ pretty-expanded FIXME #23616 |
| |
| #![allow(dead_code)] |
| #![feature(generic_arg_infer)] |
| |
| trait Test { |
| fn foo(&self) { } |
| } |
| |
| struct Foo; |
| impl Test for Foo {} |
| |
| struct SomeStruct<'a> { |
| t: &'a dyn Test, |
| u: &'a (dyn Test+'a), |
| } |
| |
| fn a<'a, const N: usize>(_: [u8; N], t: &'a (dyn Test+'a), mut ss: SomeStruct<'a>) { |
| ss.t = t; |
| } |
| |
| fn b<'a, T>(_: T, t: &'a (dyn Test+'a), mut ss: SomeStruct<'a>) { |
| ss.u = t; |
| } |
| |
| fn main() { |
| // Inside a function body, we can just infer both |
| // lifetimes, to allow &'tmp (Display+'static). |
| a::<_>([], &Foo as &dyn Test, SomeStruct{t:&Foo,u:&Foo}); |
| b::<_>(0u8, &Foo as &dyn Test, SomeStruct{t:&Foo,u:&Foo}); |
| } |