// check-pass trait Foo { type Output; } trait Bar<'a, T>: for<'s> Foo<&'s T, Output=bool> { fn cb(&self) -> Box>; } impl<'s> Foo<&'s ()> for () { type Output = bool; } impl<'a> Bar<'a, ()> for () { fn cb(&self) -> Box> { Box::new(*self) } } fn main() { let _t = ().cb(); }