trait A { fn foo(&mut self) {} } trait B : A { fn foo(&mut self) {} } fn bar(a: &T) { a.foo() //~ ERROR multiple applicable items } trait C { fn foo(&self) {} } trait D : C { fn foo(&self) {} } fn quz(a: &T) { a.foo() //~ ERROR multiple applicable items } trait E : Sized { fn foo(self) {} } trait F : E { fn foo(self) {} } fn foo(a: T) { a.foo() //~ ERROR multiple applicable items } fn pass(a: &T) { a.foo() } fn main() {}