1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
// check-pass #![allow(dead_code)] trait MultiDispatch<T> { type O; } trait Trait: Sized { type A: MultiDispatch<Self::B, O = Self>; type B; fn new<U>(u: U) -> <Self::A as MultiDispatch<U>>::O where Self::A: MultiDispatch<U>; } fn test<T: Trait<B = i32>>(b: i32) -> T where T::A: MultiDispatch<i32>, { T::new(b) } fn main() {}