| // Repro for <https://github.com/rust-lang/rust/issues/60658#issuecomment-1509321859>. |
| //@ edition: 2021 |
| //@ revisions: assumptions no_assumptions |
| //@[assumptions] compile-flags: -Zhigher-ranked-assumptions |
| //@[assumptions] known-bug: unknown |
| //@[no_assumptions] known-bug: #110338 |
| |
| use core::pin::Pin; |
| use std::future::Future; |
| |
| pub trait Foo<'a> { |
| type Future: Future<Output = ()>; |
| |
| fn foo() -> Self::Future; |
| } |
| |
| struct MyType<T>(T); |
| |
| impl<'a, T> Foo<'a> for MyType<T> |
| where |
| T: Foo<'a>, |
| T::Future: Send, |
| { |
| type Future = Pin<Box<dyn Future<Output = ()> + Send + 'a>>; |
| |
| fn foo() -> Self::Future { |
| Box::pin(async move { <T as Foo<'a>>::foo().await }) |
| } |
| } |
| |
| fn main() {} |