// edition:2018
// check-pass

#![feature(unboxed_closures)]
use std::future::Future;

async fn wrapper<F>(f: F)
where for<'a> F: FnOnce<(&'a mut i32,)>,
    for<'a> <F as FnOnce<(&'a mut i32,)>>::Output: Future<Output=()> + 'a
{
    let mut i = 41;
    f(&mut i).await;
}

async fn add_one(i: &mut i32) {
    *i = *i + 1;
}

fn main() {}