diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs
index 8a28988c2cbc..c0eae9294987 100644
--- a/src/libcore/iter.rs
+++ b/src/libcore/iter.rs
@@ -372,8 +372,10 @@ pub trait IteratorExt: Iterator {
/// ```
#[inline]
#[unstable = "waiting for unboxed closures"]
- fn flat_map<'r, B, U: Iterator>(self, f: |A|: 'r -> U)
- -> FlatMap<'r, A, Self, U> {
+ fn flat_map(self, f: F) -> FlatMap where
+ U: Iterator,
+ F: FnMut(A) -> U,
+ {
FlatMap{iter: self, f: f, frontiter: None, backiter: None }
}
@@ -1864,15 +1866,19 @@ impl Iterator for Scan where
///
#[must_use = "iterator adaptors are lazy and do nothing unless consumed"]
#[unstable = "waiting for unboxed closures"]
-pub struct FlatMap<'a, A, T, U> {
- iter: T,
- f: |A|: 'a -> U,
+pub struct FlatMap where I: Iterator, U: Iterator, F: FnMut(A) -> U {
+ iter: I,
+ f: F,
frontiter: Option,
backiter: Option,
}
#[unstable = "trait is unstable"]
-impl<'a, A, T: Iterator, B, U: Iterator> Iterator for FlatMap<'a, A, T, U> {
+impl Iterator for FlatMap where
+ I: Iterator,
+ U: Iterator,
+ F: FnMut(A) -> U,
+{
#[inline]
fn next(&mut self) -> Option {
loop {
@@ -1901,10 +1907,11 @@ impl<'a, A, T: Iterator, B, U: Iterator> Iterator for FlatMap<'a, A, T,
}
#[unstable = "trait is unstable"]
-impl<'a,
- A, T: DoubleEndedIterator,
- B, U: DoubleEndedIterator> DoubleEndedIterator
- for FlatMap<'a, A, T, U> {
+impl DoubleEndedIterator for FlatMap where
+ I: DoubleEndedIterator,
+ U: DoubleEndedIterator,
+ F: FnMut(A) -> U,
+{
#[inline]
fn next_back(&mut self) -> Option {
loop {