blob: 803c990ef93f12b013c3909eba9e473310425912 [file] [log] [blame]
//@ aux-build:block-on.rs
//@ edition:2021
//@ check-pass
#![feature(async_closure)]
extern crate block_on;
fn force_fnonce<T: async FnOnce()>(t: T) -> T { t }
fn main() {
block_on::block_on(async {
let x = 1i32;
// `force_fnonce` pulls the closure's kind down to `FnOnce`,
// which means that we don't treat the borrow of `x` as a
// self-borrow (with `'env` lifetime). This leads to a lifetime
// error which is solved by forcing the inner coroutine to
// be `move` as well, so that it moves `x`.
let c = force_fnonce(async move || {
println!("{x}");
});
c().await;
});
}