//@ run-pass | |
trait Future: 'static { | |
// The requirement for Self: Sized must prevent instantiation of | |
// Future::forget in vtables, otherwise there's an infinite type | |
// recursion through <Map<...> as Future>::forget. | |
fn forget(self) where Self: Sized { | |
Box::new(Map(self)) as Box<dyn Future>; | |
} | |
} | |
struct Map<A>(#[allow(dead_code)] A); | |
impl<A: Future> Future for Map<A> {} | |
pub struct Promise; | |
impl Future for Promise {} | |
fn main() { | |
Promise.forget(); | |
} |