#![feature(supertrait_item_shadowing)] trait A { fn hello(&self) { println!("A"); } } impl A for T {} trait B { fn hello(&self) { println!("B"); } } impl B for T {} trait C: A + B { fn hello(&self) { println!("C"); } } impl C for T {} // Since `D` is not a subtrait of `C`, // we have no obvious lower bound. trait D: B { fn hello(&self) { println!("D"); } } impl D for T {} fn main() { ().hello(); //~^ ERROR multiple applicable items in scope }