mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-04 06:56:14 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			35 lines
		
	
	
		
			378 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			378 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
// check-pass
 | 
						|
 | 
						|
trait Identity<Q> {
 | 
						|
    type T;
 | 
						|
}
 | 
						|
 | 
						|
impl<Q, T> Identity<Q> for T {
 | 
						|
    type T = T;
 | 
						|
}
 | 
						|
 | 
						|
trait Holds {
 | 
						|
    type Q;
 | 
						|
}
 | 
						|
 | 
						|
struct S;
 | 
						|
struct X(S);
 | 
						|
 | 
						|
struct XHelper;
 | 
						|
 | 
						|
impl Holds for X {
 | 
						|
    type Q = XHelper;
 | 
						|
}
 | 
						|
 | 
						|
impl<Q> Clone for X
 | 
						|
where
 | 
						|
    <S as Identity<Q>>::T: Clone,
 | 
						|
    X: Holds<Q = Q>,
 | 
						|
{
 | 
						|
    fn clone(&self) -> Self {
 | 
						|
        Self(self.0.clone())
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
fn main() {}
 |