trait Foo { type X; type Y; } fn have_x_want_x>(t: &T) { want_x(t); } fn have_x_want_y>(t: &T) { want_y(t); //~ ERROR type mismatch } fn have_y_want_x>(t: &T) { want_x(t); //~ ERROR type mismatch } fn have_y_want_y>(t: &T) { want_y(t); } fn have_xy_want_x>(t: &T) { want_x(t); } fn have_xy_want_y>(t: &T) { want_y(t); } fn have_xy_want_xy>(t: &T) { want_x(t); want_y(t); } fn want_x>(t: &T) { } fn want_y>(t: &T) { } fn main() { }