blob: 439973950f397a2e1d800bfe5e22d547b1897c2d [file] [log] [blame]
// edition:2018
// run-pass
use std::future::Future;
trait AsyncCallback<'a> {
type Out;
}
impl<'a, Fut, T, F> AsyncCallback<'a> for F
where
F: FnOnce(&'a mut ()) -> Fut,
Fut: Future<Output = T> + Send + 'a,
{
type Out = T;
}
trait CallbackMarker {}
impl<F, T> CallbackMarker for F
where
T: 'static,
for<'a> F: AsyncCallback<'a, Out = T> + Send,
{
}
fn do_sth<F: CallbackMarker>(_: F) {}
async fn callback(_: &mut ()) -> impl Send {}
fn main() {
do_sth(callback);
}