|  | trait A { | 
|  | type Type; //~ NOTE ambiguous `Type` from `A` | 
|  | const CONST: usize = 1; //~ NOTE candidate #1 | 
|  | fn foo(&self); //~ NOTE candidate #1 | 
|  | } | 
|  |  | 
|  | trait B { | 
|  | type Type; //~ NOTE ambiguous `Type` from `B` | 
|  | const CONST: usize; //~ NOTE candidate #2 | 
|  | fn foo(&self); //~ NOTE candidate #2 | 
|  | } | 
|  |  | 
|  | trait C: A + B {} | 
|  |  | 
|  | fn a<T: C>(t: T) { | 
|  | t.foo(); //~ ERROR multiple applicable items in scope | 
|  | //~^ NOTE multiple `foo` found | 
|  | //~| HELP disambiguate the method | 
|  | //~| HELP disambiguate the method | 
|  | let _ = T::CONST; //~ ERROR multiple applicable items in scope | 
|  | //~^ NOTE multiple `CONST` found | 
|  | //~| HELP use fully-qualified syntax | 
|  | let _: T::Type; //~ ERROR ambiguous associated type | 
|  | //~^ NOTE ambiguous associated type `Type` | 
|  | //~| HELP use fully-qualified syntax | 
|  | //~| HELP use fully-qualified syntax | 
|  | } | 
|  |  | 
|  | #[derive(Debug)] | 
|  | struct S; | 
|  |  | 
|  | impl<T: std::fmt::Debug> A for T { | 
|  | type Type = (); | 
|  | const CONST: usize = 1; //~ NOTE candidate #1 | 
|  | fn foo(&self) {} //~ NOTE candidate #1 | 
|  | } | 
|  |  | 
|  | impl<T: std::fmt::Debug> B for T { | 
|  | type Type = (); | 
|  | const CONST: usize = 1; //~ NOTE candidate #2 | 
|  | fn foo(&self) {} //~ NOTE candidate #2 | 
|  | } | 
|  |  | 
|  | fn main() { | 
|  | let s = S; | 
|  | S::foo(&s); //~ ERROR multiple applicable items in scope | 
|  | //~^ NOTE multiple `foo` found | 
|  | //~| HELP use fully-qualified syntax | 
|  | let _ = S::CONST; //~ ERROR multiple applicable items in scope | 
|  | //~^ NOTE multiple `CONST` found | 
|  | //~| HELP use fully-qualified syntax | 
|  | let _: S::Type; //~ ERROR ambiguous associated type | 
|  | //~^ HELP use fully-qualified syntax | 
|  | } |