#![feature(c_variadic)] #![feature(fn_delegation)] #![allow(incomplete_features)] mod generics { trait GenericTrait { fn bar(&self, x: T) -> T { x } fn bar1() {} } trait Trait { fn foo(&self, x: i32) -> i32 { x } fn foo1<'a>(&self, x: &'a i32) -> &'a i32 { x } fn foo2(&self, x: T) -> T { x } fn foo3<'a: 'a>(_: &'a u32) {} reuse GenericTrait::bar; //~^ delegation with early bound generics is not supported yet reuse GenericTrait::bar1; //~^ delegation with early bound generics is not supported yet } struct F; impl Trait for F {} impl GenericTrait for F {} struct S(F); impl GenericTrait for S { reuse >::bar { &self.0 } //~^ ERROR delegation with early bound generics is not supported yet reuse GenericTrait::::bar1; //~^ ERROR delegation with early bound generics is not supported yet } impl GenericTrait<()> for () { reuse GenericTrait::bar { &F } //~^ ERROR delegation with early bound generics is not supported yet reuse GenericTrait::bar1; //~^ ERROR delegation with early bound generics is not supported yet } impl Trait for &S { reuse Trait::foo; //~^ ERROR delegation with early bound generics is not supported yet } impl Trait for S { reuse Trait::foo1 { &self.0 } reuse Trait::foo2 { &self.0 } //~^ ERROR delegation with early bound generics is not supported yet //~| ERROR method `foo2` has 0 type parameters but its trait declaration has 1 type parameter reuse ::foo3; //~^ ERROR delegation with early bound generics is not supported yet //~| ERROR lifetime parameters or bounds on method `foo3` do not match the trait declaration } struct GenericS(T); impl Trait for GenericS { reuse Trait::foo { &self.0 } //~^ ERROR delegation with early bound generics is not supported yet } } mod opaque { trait Trait {} impl Trait for () {} mod to_reuse { use super::Trait; pub fn opaque_arg(_: impl Trait) -> i32 { 0 } pub fn opaque_ret() -> impl Trait { unimplemented!() } } reuse to_reuse::opaque_arg; //~^ ERROR delegation with early bound generics is not supported yet reuse to_reuse::opaque_ret; //~^ ERROR delegation to a function with opaque type is not supported yet } mod fn_header { mod to_reuse { pub unsafe fn unsafe_fn() {} pub extern "C" fn extern_fn() {} pub unsafe extern "C" fn variadic_fn(n: usize, mut args: ...) {} pub const fn const_fn() {} } reuse to_reuse::unsafe_fn; //~^ ERROR delegation to unsafe functions is not supported yet reuse to_reuse::extern_fn; //~^ ERROR delegation to non Rust ABI functions is not supported yet reuse to_reuse::variadic_fn; //~^ ERROR delegation to variadic functions is not supported yet reuse to_reuse::const_fn; //~^ ERROR delegation to const functions is not supported yet } mod recursive { mod to_reuse1 { pub mod to_reuse2 { pub fn foo() {} } pub reuse to_reuse2::foo; } reuse to_reuse1::foo; //~^ ERROR recursive delegation is not supported yet } fn main() {}