#![feature(fn_delegation)] #![allow(incomplete_features)] trait Trait { fn foo1(&self, x: i32) -> i32 { x } fn foo2(x: i32) -> i32 { x } } struct F; impl Trait for F {} struct S(F); pub mod to_reuse { pub fn foo3() {} } impl F { fn foo4(&self) {} } mod fn_to_other { use super::*; reuse Trait::foo1; reuse ::foo2; reuse to_reuse::foo3; reuse S::foo4; //~^ ERROR cannot find function `foo4` in `S` } mod inherent_impl_assoc_fn_to_other { use crate::*; impl S { reuse Trait::foo1 { self.0 } reuse ::foo2; reuse to_reuse::foo3; reuse F::foo4 { &self.0 } //~^ ERROR cannot find function `foo4` in `F` } } mod trait_impl_assoc_fn_to_other { use crate::*; impl Trait for S { reuse Trait::foo1 { self.0 } reuse ::foo2; reuse to_reuse::foo3; //~^ ERROR method `foo3` is not a member of trait `Trait` reuse F::foo4 { &self.0 } //~^ ERROR method `foo4` is not a member of trait `Trait` //~| ERROR cannot find function `foo4` in `F` } } mod trait_assoc_fn_to_other { use crate::*; trait Trait2 : Trait { reuse ::foo1 { self } //~^ ERROR mismatched types reuse ::foo2; reuse to_reuse::foo3; reuse F::foo4 { &F } //~^ ERROR cannot find function `foo4` in `F` } } mod type_mismatch { use crate::*; struct S2; impl Trait for S { //~^ ERROR conflicting implementations of trait `Trait` for type `S` reuse ::foo1; //~^ ERROR mismatched types //~| ERROR the trait bound `S2: Trait` is not satisfied } } fn main() {}