rust-lang / rust-lang/rfcs

PartialEq between reference and non-reference type?

Open
#1,332 4 comments 6 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

T-lang T-libs
Dominant language
Markdown
Stars
6.6k
Forks
1.7k
Avg merge
16h 14m
Merged PRs (30d)
1

Description

I'm not sure, if that's intended, but it's "impossible" to compare a reference type with a non-reference type via PartialEq. Short example code:

let a = 3;
let b = 4;
&a == &b; // works
a == &b;   // doesn't work

This should work in my opinion. There already are these impls in std (I removed some noise -- original):

impl<A, B> PartialEq<&    B> for &    A where A: PartialEq<B>
impl<A, B> PartialEq<&mut B> for &mut A where A: PartialEq<B>
impl<A, B> PartialEq<&mut B> for &    A where A: PartialEq<B>
impl<A, B> PartialEq<&    B> for &mut A where A: PartialEq<B>

The third line in my example works because of this.

Why not something like this?

impl<A, B> PartialEq<&B> for  A where A: PartialEq<B>
impl<A, B> PartialEq< B> for &A where A: PartialEq<B>

Or do I misunderstand something?

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the std::cmp::PartialEq implementations shown in the issue and review Rust's trait and coherence rules for reference-versus-value comparisons. Determine whether the proposed implementations are sound and what API or language design is needed; done means reaching and documenting a resolved design decision.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
compilers
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.