// check-pass trait Yokeable<'a> { type Output: 'a; } impl<'a> Yokeable<'a> for () { type Output = (); } trait DataMarker<'data> { type Yokeable: for<'a> Yokeable<'a>; } impl<'data> DataMarker<'data> for () { type Yokeable = (); } struct DataPayload<'data, M>(&'data M); impl DataPayload<'static, ()> { pub fn map_project_with_capture( _: for<'a> fn( capture: T, std::marker::PhantomData<&'a ()>, ) -> >::Output, ) -> DataPayload<'static, M2> where M2: DataMarker<'static>, { todo!() } } fn main() { let _: DataPayload<()> = DataPayload::<()>::map_project_with_capture::<_, &()>(|_, _| todo!()); }