2023-11-26 06:57:31 -06:00
|
|
|
//@ run-pass
|
|
|
|
|
|
|
|
#![feature(fn_delegation)]
|
2024-03-26 10:59:03 -05:00
|
|
|
#![allow(incomplete_features)]
|
2023-11-26 06:57:31 -06:00
|
|
|
|
|
|
|
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)));
|
|
|
|
}
|