mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-03 22:49:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			31 lines
		
	
	
		
			512 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			512 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
// run-pass
 | 
						|
// Tests that you can use a fn lifetime parameter as part of
 | 
						|
// the value for a type parameter in a bound.
 | 
						|
 | 
						|
 | 
						|
trait GetRef<'a> {
 | 
						|
    fn get(&self) -> &'a isize;
 | 
						|
}
 | 
						|
 | 
						|
#[derive(Copy, Clone)]
 | 
						|
struct Box<'a> {
 | 
						|
    t: &'a isize
 | 
						|
}
 | 
						|
 | 
						|
impl<'a> GetRef<'a> for Box<'a> {
 | 
						|
    fn get(&self) -> &'a isize {
 | 
						|
        self.t
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
impl<'a> Box<'a> {
 | 
						|
    fn add<'b,G:GetRef<'b>>(&self, g2: G) -> isize {
 | 
						|
        *self.t + *g2.get()
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
pub fn main() {
 | 
						|
    let b1 = Box { t: &3 };
 | 
						|
    assert_eq!(b1.add(b1), 6);
 | 
						|
}
 |