#![feature(type_alias_impl_trait)] use std::marker::PhantomData; trait Trait { fn foo(t: T) -> U; } trait ProofForConversion { fn convert(_: PhantomData, r: T) -> U; } impl ProofForConversion for () { fn convert(_: PhantomData, r: T) -> U { X::foo(r) } } type Converter = impl ProofForConversion; fn _defining_use() -> Converter { () //~^ ERROR the trait bound `T: Trait` is not satisfied } fn main() { }