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