1 trait Foo { 2 type X; 3 type Y; 4 } 5 have_x_want_x<T:Foo<X=u32>>(t: &T)6fn have_x_want_x<T:Foo<X=u32>>(t: &T) 7 { 8 want_x(t); 9 } 10 have_x_want_y<T:Foo<X=u32>>(t: &T)11fn have_x_want_y<T:Foo<X=u32>>(t: &T) 12 { 13 want_y(t); //~ ERROR type mismatch 14 } 15 have_y_want_x<T:Foo<Y=i32>>(t: &T)16fn have_y_want_x<T:Foo<Y=i32>>(t: &T) 17 { 18 want_x(t); //~ ERROR type mismatch 19 } 20 have_y_want_y<T:Foo<Y=i32>>(t: &T)21fn have_y_want_y<T:Foo<Y=i32>>(t: &T) 22 { 23 want_y(t); 24 } 25 have_xy_want_x<T:Foo<X=u32,Y=i32>>(t: &T)26fn have_xy_want_x<T:Foo<X=u32,Y=i32>>(t: &T) 27 { 28 want_x(t); 29 } 30 have_xy_want_y<T:Foo<X=u32,Y=i32>>(t: &T)31fn have_xy_want_y<T:Foo<X=u32,Y=i32>>(t: &T) 32 { 33 want_y(t); 34 } 35 have_xy_want_xy<T:Foo<X=u32,Y=i32>>(t: &T)36fn have_xy_want_xy<T:Foo<X=u32,Y=i32>>(t: &T) 37 { 38 want_x(t); 39 want_y(t); 40 } 41 want_x<T:Foo<X=u32>>(t: &T)42fn want_x<T:Foo<X=u32>>(t: &T) { } 43 want_y<T:Foo<Y=i32>>(t: &T)44fn want_y<T:Foo<Y=i32>>(t: &T) { } 45 main()46fn main() { } 47