//@ run-pass // Ensure that provided items are inherited properly even when impls vary in // type parameters *and* rely on projections, and the type parameters are input // types on the trait. #![feature(specialization)] //~ WARN the feature `specialization` is incomplete trait Trait { fn convert(&self) -> T; } trait WithAssoc { type Item; fn as_item(&self) -> &Self::Item; } impl Trait for T where T: WithAssoc, U: Clone { fn convert(&self) -> U { self.as_item().clone() } } impl WithAssoc for u8 { type Item = u8; fn as_item(&self) -> &u8 { self } } impl Trait for u8 {} fn main() { assert!(3u8.convert() == 3u8); }