mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 04:57:19 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			39 lines
		
	
	
		
			984 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			984 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| // compile-flags:-Z unstable-options --show-coverage
 | |
| // check-pass
 | |
| 
 | |
| #![feature(trait_alias)]
 | |
| #![feature(type_alias_impl_trait)]
 | |
| 
 | |
| /// look at this trait right here
 | |
| pub trait ThisTrait {
 | |
|     /// that's a trait all right
 | |
|     fn right_here(&self);
 | |
| 
 | |
|     /// even the provided functions show up as trait methods
 | |
|     fn aww_yeah(&self) {}
 | |
| 
 | |
|     /// gotta check those associated types, they're slippery
 | |
|     type SomeType;
 | |
| }
 | |
| 
 | |
| /// so what happens if we take some struct...
 | |
| #[derive(Clone)]
 | |
| pub struct SomeStruct;
 | |
| 
 | |
| /// ...and slap this trait on it?
 | |
| impl ThisTrait for SomeStruct {
 | |
|     /// nothing! trait impls are totally ignored in this calculation, sorry.
 | |
|     fn right_here(&self) {}
 | |
| 
 | |
|     type SomeType = String;
 | |
| }
 | |
| 
 | |
| /// but what about those aliases? i hear they're pretty exotic
 | |
| pub trait MyAlias = ThisTrait + Send + Sync;
 | |
| 
 | |
| /// woah, getting all opaque in here
 | |
| pub type ThisExists = impl ThisTrait;
 | |
| 
 | |
| /// why don't we get a little more concrete
 | |
| pub fn defines() -> ThisExists { SomeStruct {} }
 | 
