mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-03 22:49:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			28 lines
		
	
	
		
			646 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			646 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
//@ build-pass
 | 
						|
//@ edition: 2021
 | 
						|
 | 
						|
// Demonstrates that an async closure may implement `FnMut` (not just `async FnMut`!)
 | 
						|
// if it has no self-borrows. In this case, `&Ty` is not borrowed from the closure env,
 | 
						|
// since it's fine to reborrow it with its original lifetime. See the doc comment on
 | 
						|
// `should_reborrow_from_env_of_parent_coroutine_closure` for more detail for when we
 | 
						|
// must borrow from the closure env.
 | 
						|
 | 
						|
#![feature(async_closure)]
 | 
						|
 | 
						|
fn main() {
 | 
						|
    hello(&Ty);
 | 
						|
}
 | 
						|
 | 
						|
fn needs_fn_mut<T>(mut x: impl FnMut() -> T) {
 | 
						|
    x();
 | 
						|
}
 | 
						|
 | 
						|
fn hello(x: &Ty) {
 | 
						|
    needs_fn_mut(async || { x.hello(); });
 | 
						|
}
 | 
						|
 | 
						|
struct Ty;
 | 
						|
impl Ty {
 | 
						|
    fn hello(&self) {}
 | 
						|
}
 |