//@ check-pass #![feature(lazy_type_alias)] #![allow(incomplete_features)] type Injective = Local; struct Local(T); impl Injective { fn take(_: T) {} } trait Trait { type Out; fn produce() -> Self::Out; } impl Trait for Injective { type Out = T; fn produce() -> Self::Out { T::default() } } fn main() { Injective::take(0); let _: String = Injective::produce(); let _: bool = Local::produce(); }