mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 21:16:44 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			30 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| // Checks for `if` expressions with respect to default match bindings.
 | |
| // Specifically, we do not accept `if cond { ... }` where `cond: &mut? bool`.
 | |
| // Meanwhile, `match cond { true => ..., _ => ... }` does accept that.
 | |
| 
 | |
| // FIXME(@rust-lang/lang-team): consider relaxing this?
 | |
| 
 | |
| fn b_ref<'a>() -> &'a bool { &true }
 | |
| fn b_mut_ref<'a>() -> &'a mut bool { &mut true }
 | |
| //~^ ERROR: cannot return reference to temporary
 | |
| 
 | |
| fn main() {
 | |
|     // This is OK:
 | |
|     match b_ref() { true => {}, _ => {} }
 | |
|     match b_mut_ref() { true => {}, _ => {} }
 | |
|     match &true { true => {}, _ => {} }
 | |
|     match &mut true { true => {}, _ => {} }
 | |
| 
 | |
|     // This is NOT:
 | |
|     if b_ref() {} //~ ERROR mismatched types [E0308]
 | |
|     if b_mut_ref() {} //~ ERROR mismatched types [E0308]
 | |
|     if &true {} //~ ERROR mismatched types [E0308]
 | |
|     if &mut true {} //~ ERROR mismatched types [E0308]
 | |
| 
 | |
|     // This is also NOT:
 | |
|     while b_ref() {} //~ ERROR mismatched types [E0308]
 | |
|     while b_mut_ref() {} //~ ERROR mismatched types [E0308]
 | |
|     while &true {} //~ ERROR mismatched types [E0308]
 | |
|     while &mut true {} //~ ERROR mismatched types [E0308]
 | |
| }
 | 
