mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 13:04:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			38 lines
		
	
	
		
			767 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			767 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| //@ check-pass
 | |
| 
 | |
| // Some trait with a function that returns a slice:
 | |
| pub trait AsSlice {
 | |
|     type Element;
 | |
|     fn as_slice(&self) -> &[Self::Element];
 | |
| }
 | |
| 
 | |
| // Some type
 | |
| pub struct A<Cont>(Cont);
 | |
| 
 | |
| // Here we say that if A wraps a slice, then it implements AsSlice
 | |
| impl<'a, Element> AsSlice for A<&'a [Element]> {
 | |
|     type Element = Element;
 | |
|     fn as_slice(&self) -> &[Self::Element] {
 | |
|         self.0
 | |
|     }
 | |
| }
 | |
| 
 | |
| impl<Cont> A<Cont> {
 | |
|     // We want this function to work
 | |
|     pub fn failing<Coef>(&self)
 | |
|     where
 | |
|         Self: AsSlice<Element = Coef>,
 | |
|     {
 | |
|         self.as_ref_a().as_ref_a();
 | |
|     }
 | |
| 
 | |
|     pub fn as_ref_a<Coef>(&self) -> A<&[<Self as AsSlice>::Element]>
 | |
|     where
 | |
|         Self: AsSlice<Element = Coef>,
 | |
|     {
 | |
|         A(self.as_slice())
 | |
|     }
 | |
| }
 | |
| 
 | |
| fn main() {}
 | 
