@@ -1368,7 +1368,7 @@ impl<I: Iterator, P> Iterator for Filter<I, P> where P: FnMut(&I::Item) -> bool
1368
1368
}
1369
1369
1370
1370
#[ inline]
1371
- fn size_hint ( & self ) -> ( usize , Option < usize > ) {
1371
+ default fn size_hint ( & self ) -> ( usize , Option < usize > ) {
1372
1372
let ( _, upper) = self . iter . size_hint ( ) ;
1373
1373
( 0 , upper) // can't know a lower bound, due to the predicate
1374
1374
}
@@ -1418,6 +1418,26 @@ impl<I: Iterator, P> Iterator for Filter<I, P> where P: FnMut(&I::Item) -> bool
1418
1418
}
1419
1419
}
1420
1420
1421
+ use ops:: RangeFrom ;
1422
+ ///
1423
+ #[ unstable( feature="test" , issue="0" ) ]
1424
+ pub trait FancyIter : Iterator { }
1425
+ #[ unstable( feature="test" , issue="0" ) ]
1426
+ impl < T : Step > FancyIter for RangeFrom < T > { }
1427
+
1428
+ #[ unstable( feature="test" , issue="0" ) ]
1429
+ impl < I : FancyIter , P : FnMut ( & I :: Item ) -> bool > Iterator for Filter < I , P > {
1430
+ fn size_hint ( & self ) -> ( usize , Option < usize > ) {
1431
+ ( 0 , None )
1432
+ }
1433
+ }
1434
+
1435
+ #[ allow( warnings) ]
1436
+ fn foo ( ) {
1437
+ let foo: isize = ( 0 ..) . filter ( |i| * i < 5 ) . next ( ) . unwrap ( ) ;
1438
+ }
1439
+
1440
+
1421
1441
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1422
1442
impl < I : DoubleEndedIterator , P > DoubleEndedIterator for Filter < I , P >
1423
1443
where P : FnMut ( & I :: Item ) -> bool ,
0 commit comments