//@ run-pass trait Super { fn call(&self) where U: HigherRanked, { } } impl Super for () {} trait HigherRanked {} impl HigherRanked for for<'a> fn(&'a ()) {} trait Unimplemented {} impl HigherRanked for T {} trait Sub: Super + Super fn(&'a ())> {} impl Sub for () {} fn main() { let a: &dyn Sub = &(); // `Super` and `Super fn(&'a ())>` have different // vtables and we need to upcast to the latter! let b: &dyn Super fn(&'a ())> = a; b.call(); }