use std::{ future::Future, pin::Pin, marker::Unpin, task::{Context, Poll}, }; struct Sleep(std::marker::PhantomPinned); impl Future for Sleep { type Output = (); fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { Poll::Ready(()) } } impl Drop for Sleep { fn drop(&mut self) {} } fn sleep() -> Sleep { Sleep(std::marker::PhantomPinned) } struct MyFuture { sleep: Sleep, } impl MyFuture { fn new() -> Self { Self { sleep: sleep(), } } } impl Future for MyFuture { type Output = (); fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { Pin::new(&mut self.sleep).poll(cx) //~^ ERROR `PhantomPinned` cannot be unpinned } } fn main() {}