//@ check-pass #![feature(specialization)] //~ WARN the feature `specialization` is incomplete pub struct Cloned(I); impl<'a, I, T: 'a> Iterator for Cloned where I: Iterator, T: Clone, { type Item = T; fn next(&mut self) -> Option { unimplemented!() } default fn count(self) -> usize where Self: Sized { self.fold(0, |cnt, _| cnt + 1) } } impl<'a, I, T: 'a> Iterator for Cloned where I: Iterator, T: Copy, { fn count(self) -> usize { unimplemented!() } } fn main() { let a = [1,2,3,4]; Cloned(a.iter()).count(); }