| //! This test checks that we can resolve the `boxed` method call to `FutureExt`, |
| //! because we know that the anonymous future does not implement `StreamExt`. |
| |
| //@ edition: 2021 |
| //@ check-pass |
| |
| use std::future::Future; |
| use std::pin::Pin; |
| |
| trait FutureExt: Future + Sized + Send + 'static { |
| fn boxed(self) -> Pin<Box<dyn Future<Output = Self::Output> + Send + 'static>> { |
| Box::pin(self) |
| } |
| } |
| |
| trait StreamExt: Future + Sized + Send + 'static { |
| fn boxed(self) -> Pin<Box<dyn Future<Output = Self::Output> + Send + 'static>> { |
| Box::pin(self) |
| } |
| } |
| |
| impl<T: Future + Sized + Send + 'static> FutureExt for T {} |
| |
| fn go(i: usize) -> impl Future<Output = ()> + Send + 'static { |
| async move { |
| if i != 0 { |
| spawn(async move { |
| let fut = go(i - 1).boxed(); |
| fut.await; |
| }) |
| .await; |
| } |
| } |
| } |
| |
| pub fn spawn<T: Send>( |
| _: impl Future<Output = T> + Send + 'static, |
| ) -> impl Future<Output = ()> + Send + 'static { |
| async move { todo!() } |
| } |
| |
| fn main() {} |