rust/src/test/ui/issues/issue-22036.rs
2019-07-27 18:56:16 +03:00

26 lines
505 B
Rust

// run-pass
trait DigitCollection: Sized {
type Iter: Iterator<Item = u8>;
fn digit_iter(self) -> Self::Iter;
fn digit_sum(self) -> u32 {
self.digit_iter()
.map(|digit: u8| digit as u32)
.fold(0, |sum, digit| sum + digit)
}
}
impl<I> DigitCollection for I where I: Iterator<Item=u8> {
type Iter = I;
fn digit_iter(self) -> I {
self
}
}
fn main() {
let xs = vec![1, 2, 3, 4, 5];
assert_eq!(xs.into_iter().digit_sum(), 15);
}