Skip to content

E0034 should provide the disambiguated syntax for the candidates #37767

Closed
@gnzlbg

Description

@gnzlbg

Currently, with the following code:

trait A { fn foo(&self) {} }
trait B : A { fn foo(&self) {} }

fn bar<T: B>(a: &T) {
  a.foo()
}

fn main() {}

prints the following error message:

error[E0034]: multiple applicable items in scope
 --> <anon>:5:5
  |
5 |   a.foo()
  |     ^^^ multiple `foo` found
  |
note: candidate #1 is defined in the trait `A`
 --> <anon>:1:11
  |
1 | trait A { fn foo(&self) {} }
  |           ^^^^^^^^^^^^^^^^
note: candidate #2 is defined in the trait `B`
 --> <anon>:2:15
  |
2 | trait B : A { fn foo(&self) {} }
  |               ^^^^^^^^^^^^^^^^

error: aborting due to previous error

It would be nice if it would tell me what exactly do I need to type in order to choose candidate 1 or candidate 2. In particular, when associated types, Input/Output parameters, ... are involved, the disambiguation syntax can be tricky.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-diagnosticsArea: Messages for errors, warnings, and lints

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions