rust/tests/ui/async-await/async-closures/drop.rs

39 lines
712 B
Rust
Raw Normal View History

//@ aux-build:block-on.rs
//@ edition:2018
//@ run-pass
//@ check-run-results
#![feature(async_closure)]
#![allow(unused)]
extern crate block_on;
struct DropMe(i32);
impl Drop for DropMe {
fn drop(&mut self) {
println!("{} was dropped", self.0);
}
}
async fn call_once(f: impl async FnOnce()) {
println!("before call");
let fut = Box::pin(f());
println!("after call");
drop(fut);
println!("future dropped");
}
fn main() {
block_on::block_on(async {
let d = DropMe(42);
let async_closure = async move || {
let d = &d;
println!("called");
};
call_once(async_closure).await;
println!("after");
});
}