> So if rustc knows that == is fn eq<T>(x: &T, y: &T) -> bool and &T and T won't work, and T can be converted to &T, then perform the conversion and continue.

To elaborate on my own point, _if we wanted to_ (and I think this can be not implemented at all), we could make rustc aware of "deeper" implicit conversions so that `(&u8, &u8)` can be _considered_ to be (**not** converted to) `(u8, &u8)`, `(&u8, u8)` and `(u8, u8)` because the inner `&u8` can be converted to `u8`, so any code that actually uses the other types "reachable" from `(&u8, &u8)` can do so.