Use a generic which includes the lifetime (... for TypeErasedIterable<&'a T>)
But there is no notation for "the maximum lifetime which a type could meet in a bound", which is what it looks like you wish for here.
impl<T: Iterable> Iterable for TypeErasedIterable<T> {
// Imaginary language feature vvvvvvvvvvvv
type Iter = Box<dyn Iterator<Item = T::Item> + 'limit(Self)>;
type Item = T::Item;
}
Yes, because if I just write Box<dyn Iterator<Item = T::Item>> without the 'a bound. Lifetime elision rule will give it the 'static bound, which also requires other type parameters to outlive 'static. So if I have an Iterable, say impl<'a, T> Iterable for &'a Vec<T> then Self::Iter will be 'a, then I wouldn't be able to use Iterable impl for TypeErasedIterable because of failed unsizing coercion