Pin, Unpin, and why Rust needs them
blog.cloudflare.com
blog.cloudflare.com
I guess maybe if direct self-referencing is a distinct case from indirect self-referencing then it might not be problematic for single-ownership?
async fn time_future<Fut: Future>(fut: Fut) -> (Fut::Output, Duration) {
let start = Instant::now();
let result = fut.await;
(result, start.elapsed())
}