35 lines
577 B
Rust
35 lines
577 B
Rust
|
//@ 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);
|
||
|
}
|