mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-30 20:44:34 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			40 lines
		
	
	
		
			801 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			801 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #![feature(type_alias_impl_trait)]
 | |
| //@ edition:2021
 | |
| //@ check-pass
 | |
| //@ revisions: tait rpit
 | |
| 
 | |
| struct Pending {}
 | |
| 
 | |
| struct CantOpen {}
 | |
| 
 | |
| trait AsyncRead {}
 | |
| 
 | |
| impl AsyncRead for i32 {}
 | |
| 
 | |
| type PendingReader<'a> = impl AsyncRead + 'a;
 | |
| 
 | |
| #[cfg(tait)]
 | |
| type OpeningReadFuture<'a> = impl std::future::Future<Output = Result<PendingReader<'a>, CantOpen>>;
 | |
| 
 | |
| impl Pending {
 | |
|     async fn read(&mut self) -> Result<impl AsyncRead + '_, CantOpen> {
 | |
|         Ok(42)
 | |
|     }
 | |
| 
 | |
|     #[cfg(tait)]
 | |
|     #[define_opaque(OpeningReadFuture)]
 | |
|     fn read_fut(&mut self) -> OpeningReadFuture<'_> {
 | |
|         self.read()
 | |
|     }
 | |
| 
 | |
|     #[cfg(rpit)]
 | |
|     #[define_opaque(PendingReader)]
 | |
|     fn read_fut(
 | |
|         &mut self,
 | |
|     ) -> impl std::future::Future<Output = Result<PendingReader<'_>, CantOpen>> {
 | |
|         self.read()
 | |
|     }
 | |
| }
 | |
| 
 | |
| fn main() {}
 | 
