#![feature(arbitrary_self_types)] #![feature(type_alias_impl_trait)] use std::ops::Deref; trait Foo { type Bar: Foo; fn foo(self: impl Deref) -> Self::Bar; } impl Foo for C { type Bar = impl Foo; fn foo(self: impl Deref) -> Self::Bar { self //~^ Error type parameter `impl Deref` is part of concrete type but not used in parameter list for the `impl Trait` type alias } } fn main() {}