#![feature(type_alias_impl_trait)] use std::fmt::Debug; pub trait Foo { type Item: Debug; fn foo(_: T) -> Self::Item; } #[derive(Debug)] pub struct S(std::marker::PhantomData); pub struct S2; impl Foo for S2 { type Item = impl Debug; fn foo(_: T) -> Self::Item { S::(Default::default()) //~^ Error type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias } } fn main() { S2::foo(123); }