#![feature(type_alias_impl_trait)] //@ edition:2021 //@ compile-flags: --crate-type=lib use std::future::Future; trait Bar { fn bar(&self); } type FooFuture = impl Future; #[define_opaque(FooFuture)] fn foo(bar: B) -> FooFuture { async move { bar.bar() } //~^ ERROR: the trait bound `B: Bar` is not satisfied } pub fn mainish(ctx: &mut std::task::Context) { let boom: FooFuture = unsafe { core::mem::zeroed() }; Box::pin(boom).as_mut().poll(ctx); }