pub trait LendingIterator { type Item<'a> where Self: 'a; fn consume(self, _f: F) where Self: Sized, for<'a> Self::Item<'a>: FuncInput<'a, Self::Item<'a>>, { } } impl LendingIterator for &mut I { type Item<'a> = I::Item<'a> where Self: 'a; } struct EmptyIter; impl LendingIterator for EmptyIter { type Item<'a> = &'a mut () where Self:'a; } pub trait FuncInput<'a, F> where F: Foo, Self: Sized, { } impl<'a, T, F: 'a> FuncInput<'a, F> for T where F: Foo {} trait Foo {} fn map_test() { (&mut EmptyIter).consume(()); //~^ ERROR the trait bound `for<'a> &'a mut (): Foo<&'a mut ()>` is not satisfied } fn main() {}