// 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}); }