E4017

E4017#

Method of type is ambiguous, it may come from multiple traits.

Erroneous Example#

priv struct S {
  v : Int
}

priv trait A {
  value(Self) -> Int
}

priv trait B {
  value(Self) -> Int
}

impl A for S with value(self) {
  self.v
}

impl B for S with value(self) {
  self.v + 1
}

pub fn read() -> Int {
  let s : S = { v: 3 }
  s.value()
}

The example above tries to call the method value on a type S, but the method name comes from both A and B traits, giving an error like:

Method value of type S is ambiguous, it may come from trait A or B

Suggestion#

Disambiguate the method by specifying the trait it comes from:

priv struct  {
   : 
}

priv trait  {
  () -> 
}

priv trait  {
  () -> 
}

impl  for  with () {
  .
}

impl  for  with () {
  . + 1
}

pub fn () ->  {
  let  :  = { : 3 }
  ::() + ::()
}