//! 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 + Send + 'static>> { Box::pin(self) } } trait StreamExt: Future + Sized + Send + 'static { fn boxed(self) -> Pin + Send + 'static>> { Box::pin(self) } } impl FutureExt for T {} fn go(i: usize) -> impl Future + Send + 'static { async move { if i != 0 { spawn(async move { let fut = go(i - 1).boxed(); fut.await; }) .await; } } } pub fn spawn( _: impl Future + Send + 'static, ) -> impl Future + Send + 'static { async move { todo!() } } fn main() {}