// check-pass use std::marker::PhantomData; trait Lt<'a> { type T; } struct Id(PhantomData); impl<'a,T> Lt<'a> for Id { type T = T; } struct Ref(PhantomData) where T: ?Sized; impl<'a,T> Lt<'a> for Ref where T: 'a + Lt<'a> + ?Sized { type T = &'a T; } struct Mut(PhantomData) where T: ?Sized; impl<'a,T> Lt<'a> for Mut where T: 'a + Lt<'a> + ?Sized { type T = &'a mut T; } struct C(for<'a> fn(>::T) -> O) where I: for<'a> Lt<'a>; fn main() { let c = C::,_>(|()| 3); c.0(()); }