| //@ check-pass | |
| use std::marker::PhantomData; | |
| trait A<'a> { | |
| type B; | |
| fn b(self) -> Self::B; | |
| } | |
| struct T; | |
| struct S<'a>(PhantomData<&'a ()>); | |
| impl<'a> A<'a> for T { | |
| type B = S<'a>; | |
| fn b(self) -> Self::B { | |
| S(PhantomData) | |
| } | |
| } | |
| fn s<TT, F>(t: TT, f: F) | |
| where | |
| TT: for<'a> A<'a>, | |
| F: for<'a> FnOnce(<TT as A<'a>>::B) | |
| { | |
| f(t.b()); | |
| } | |
| fn main() { | |
| s(T, |_| {}); | |
| } |