Currently, 2 == 2 works, and &2 == &2 works with the same semantics, but compiler rejects 2 == &2:
error[E0277]: can't compare `{integer}` with `&{integer}`
--> src/main.rs:4:15
|
4 | let y = x == &x;
| ^^ no implementation for `{integer} == &{integer}`
|
= help: the trait `PartialEq<&{integer}>` is not implemented for `{integer}`
So a general impl PartialEq<&T> for T is not possible, but what about special implementation for primitives, like impl PartialEq<&i32> for i32? Standard library already has such implementations, like impl PartialEq<&str> for String or impl PartialEq<&[T]> for [T; N].
I find auto-(de)ref rules confusing already -- most people don't even know how they work exactly, which is a bad state to be in. I think it's better not to add even more auto-(de)ref rules into the language.
We've tried to do this kind of thing a few times, and the problem we regularly run into is that doing so breaks programs relying on type inference. While we don't consider inference failure an absolute showstopper to introducing something, these changes tend to cause widespread issues in enough Rust code to make them nonstarters.