mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 04:57:19 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			40 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| // revisions: nn ny yn yy
 | |
| // check-pass
 | |
| #![feature(const_trait_impl, associated_type_defaults, const_mut_refs)]
 | |
| 
 | |
| #[cfg_attr(any(yn, yy), const_trait)]
 | |
| pub trait Index {
 | |
|     type Output;
 | |
| }
 | |
| 
 | |
| #[cfg_attr(any(ny, yy), const_trait)]
 | |
| pub trait IndexMut where Self: Index {
 | |
|     const C: <Self as Index>::Output;
 | |
|     type Assoc = <Self as Index>::Output;
 | |
|     fn foo(&mut self, x: <Self as Index>::Output) -> <Self as Index>::Output;
 | |
| }
 | |
| 
 | |
| impl Index for () { type Output = (); }
 | |
| 
 | |
| #[cfg(not(any(nn, yn)))]
 | |
| impl const IndexMut for <() as Index>::Output {
 | |
|     const C: <Self as Index>::Output = ();
 | |
|     type Assoc = <Self as Index>::Output;
 | |
|     fn foo(&mut self, x: <Self as Index>::Output) -> <Self as Index>::Output
 | |
|         where <Self as Index>::Output:,
 | |
|     {}
 | |
| }
 | |
| 
 | |
| #[cfg(any(nn, yn))]
 | |
| impl IndexMut for <() as Index>::Output {
 | |
|     const C: <Self as Index>::Output = ();
 | |
|     type Assoc = <Self as Index>::Output;
 | |
|     fn foo(&mut self, x: <Self as Index>::Output) -> <Self as Index>::Output
 | |
|         where <Self as Index>::Output:,
 | |
|     {}
 | |
| }
 | |
| 
 | |
| const C: <() as Index>::Output = ();
 | |
| 
 | |
| fn main() {}
 | 
