Skip to content

== fails to match types on associated type with two PartialEq<A / B> bounds #34792

Closed
@SimonSapin

Description

@SimonSapin

rustc 1.12.0-nightly (47b3a98 2016-07-10)

pub struct A;
pub struct B;

pub trait Foo {
    type T: PartialEq<A> + PartialEq<B>;
}

pub fn generic<F: Foo>(t: F::T, a: A, b: B) -> bool {
    t == a && t == b
}
error: mismatched types [--explain E0308]
  --> a.rs:12:10
   |>
12 |>     t == a && t == b
   |>          ^ expected struct `B`, found struct `A`
note: expected type `B`
note:    found type `A`

error: aborting due to previous error

Changing the order of bounds in the associated type declaration changes which == causes a spurious "mismatched types" error.

Using UFCS works around the issue:

    PartialEq::<A>::eq(&t, &a) && t == b

The same issue exists with bounds like type T: PartialEq + PartialEq<B> to compare T with itself as well as another type.

Metadata

Metadata

Assignees

Labels

A-associated-itemsArea: Associated items (types, constants & functions)A-type-systemArea: Type systemC-bugCategory: This is a bug.E-easyCall for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue.E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.P-mediumMedium priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions