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