mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 13:04:42 +00:00 
			
		
		
		
	 b1d08275a9
			
		
	
	
		b1d08275a9
		
	
	
	
	
		
			
			An odd feature of Rust is that `Foo` is invalid, but `Bar` is okay:
    type Foo<'a, 'b> = Box<dyn PartialEq<Foo<'a, 'b>>>;
    type Bar<'a, 'b> = impl PartialEq<Bar<'a, 'b>>;
To get it right, track every time rustdoc descends into a type alias,
so if it shows up twice, it can be write the path instead of
infinitely expanding it.
		
	
			
		
			
				
	
	
		
			13 lines
		
	
	
		
			255 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			13 lines
		
	
	
		
			255 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| type Bar<'a, 'b> = Box<dyn PartialEq<Bar<'a, 'b>>>;
 | |
| //~^ ERROR cycle detected when expanding type alias
 | |
| 
 | |
| fn bar<'a, 'b>(i: &'a i32) -> Bar<'a, 'b> {
 | |
|     Box::new(i)
 | |
| }
 | |
| 
 | |
| fn main() {
 | |
|     let meh = 42;
 | |
|     let muh = 42;
 | |
|     assert!(bar(&meh) == bar(&muh));
 | |
| }
 |