//@ run-pass #![feature(fn_delegation)] #![allow(incomplete_features)] #![allow(dead_code)] trait Trait1 { fn foo(&self) -> i32 { 1 } } trait Trait2 { fn foo(&self) -> i32 { 2 } } struct F; impl Trait1 for F {} impl Trait2 for F {} impl F { fn foo(&self) -> i32 { 3 } } struct S(F); impl Trait1 for S { // Make sure that the generated `self.0.foo()` does not turn into the inherent method `F::foo` // that has a higher priority than methods from traits. reuse Trait1::foo { self.0 } } fn main() { let s = S(F); assert_eq!(s.foo(), 1); }