1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
//! 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() {}
|