| //@ run-pass |
| |
| #![feature(fn_delegation)] |
| #![allow(incomplete_features)] |
| |
| mod to_reuse { |
| use crate::S; |
| |
| pub fn foo<'a>(#[cfg(FALSE)] a: u8, _b: &'a S) -> u32 { |
| 1 |
| } |
| } |
| |
| reuse to_reuse::foo; |
| |
| trait Trait { |
| fn foo(&self) -> u32 { 0 } |
| fn bar(self: Box<Self>) -> u32 { 2 } |
| fn baz(a: (i32, i32)) -> i32 { a.0 + a.1 } |
| } |
| |
| struct F; |
| impl Trait for F {} |
| |
| struct S(F); |
| |
| impl Trait for S { |
| reuse to_reuse::foo { self } |
| reuse Trait::bar { Box::new(self.0) } |
| reuse <F as Trait>::baz; |
| } |
| |
| fn main() { |
| let s = S(F); |
| assert_eq!(1, foo(&s)); |
| assert_eq!(1, s.foo()); |
| assert_eq!(2, Box::new(s).bar()); |
| assert_eq!(4, S::baz((2, 2))); |
| } |