trait Original { fn f() -> impl Fn(); } trait Erased { fn f(&self) -> Box; } impl Erased for T { fn f(&self) -> Box { Box::new(::f()) //~^ ERROR the associated type `impl Fn()` may not live long enough } } fn main () {}