mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-04 06:56:14 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
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
 | 
						|
}
 |