// check-pass pub struct Struct {} pub trait Trait<'a> { type Assoc; fn method() -> Self::Assoc; } impl<'a> Trait<'a> for Struct { type Assoc = (); fn method() -> Self::Assoc {} } pub fn function(f: F) where F: for<'a> FnOnce(>::Assoc), T: for<'b> Trait<'b>, { f(T::method()); } fn main() { function::<_, Struct>(|_| {}); }