mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-04 06:56:14 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			36 lines
		
	
	
		
			779 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			779 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
// 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});
 | 
						|
}
 |