Похоже, что при использовании операторов (deref принуждение) не происходит (я не уверен, почему это так), однако заимствования могут все еще использоваться из-за реализации PartialEq
.
Из документации по Rust PartialEq
можно увидеть следующую реализацию:
impl<'a, 'b, A, B> PartialEq<&'b B> for &'a A
where
A: PartialEq<B> + ?Sized,
B: ?Sized,
Это означает, что существует реализация для заимствования типа B
и заимствования для типа A
, если существует реализация PartialEq
для типа A
и B
.
С учетом этого определения можно использовать &i32 == &i32
, поскольку i32
реализует PartialEq
, а с учетом вышеизложенного подразумевается, что PartialEq
реализовано для заимствований i32
с. Затем это приводит к рекурсивному случаю, когда &&i32 == &&i32
работает, потому что PartialEq
реализован для &i32
, поэтому, учитывая вышеизложенное, impl PartialEq
также реализуется для &&i32
.
Из-за определения этой реализации количество заимствований с обеих сторон должно быть одинаковым.