I meant that the wrapped value would still implement Future, just that the details that it needs to be pinned would be specific to that one future, not to all manual implementations of Future. Such that an async function state machine becomes:
struct __AsyncGenerated {
inner: Pin<__State>,
}
impl Future for __AsyncGenerated {
fn poll(&mut self) {
// the state is pinned, and we deal with the pin in here, because we have to
}
}
Oh sure, but my thoughts were more that seeing self: Pin<Self> at all, even if I’m not writing a self-referential future, seems like leaking the Pin/Unpin concept.
I find it similar to if poll required self: Arc<Self>, or something. I’d be left wondering… “huh? why?”