| //@ compile-flags: -Znext-solver | |
| //@ check-pass | |
| //@ edition: 2021 | |
| use std::future::Future; | |
| trait Baz { | |
| type Param; | |
| } | |
| trait FnMutFut<P, R>: FnMut(P) -> Self::Future { | |
| type Future: Future<Output = R>; | |
| } | |
| impl<P, F, FUT, R> FnMutFut<P, R> for F | |
| where | |
| F: FnMut(P) -> FUT, | |
| FUT: Future<Output = R>, | |
| { | |
| type Future = FUT; | |
| } | |
| async fn foo<BAZ>(_: BAZ, mut cb: impl for<'any> FnMutFut<&'any BAZ::Param, ()>) | |
| where | |
| BAZ: Baz<Param = i32>, | |
| { | |
| cb(&1i32).await; | |
| } | |
| fn main() { | |
| } |