| //@ run-pass | |
| #![feature(fn_delegation)] | |
| #![allow(incomplete_features)] | |
| mod to_reuse { | |
| pub fn foo<T, U>(_: T, y: U) -> U { y } | |
| } | |
| trait Trait<T> { | |
| fn foo(&self, x: T) -> T { x } | |
| } | |
| struct F; | |
| impl<T> Trait<T> for F {} | |
| struct S<T>(F, T); | |
| impl<T, U> Trait<T> for S<U> { | |
| reuse to_reuse::foo { &self.0 } | |
| } | |
| impl<T> S<T> { | |
| reuse to_reuse::foo; | |
| } | |
| fn main() { | |
| let s = S(F, 42); | |
| assert_eq!(S::<i32>::foo(F, 1), 1); | |
| assert_eq!(<S<_> as Trait<_>>::foo(&s, 1), 1); | |
| } |