@@ -1279,14 +1279,14 @@ pub struct Cloned<I> {
1279
1279
}
1280
1280
1281
1281
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1282
- impl < T , D , I > Iterator for Cloned < I > where
1283
- T : Clone ,
1284
- D : Deref < Target = T > ,
1285
- I : Iterator < Item = D > ,
1282
+ impl < I > Iterator for Cloned < I > where
1283
+ I : Iterator ,
1284
+ I :: Item : Deref ,
1285
+ < I :: Item as Deref > :: Target : Clone
1286
1286
{
1287
- type Item = T ;
1287
+ type Item = < I :: Item as Deref > :: Target ;
1288
1288
1289
- fn next ( & mut self ) -> Option < T > {
1289
+ fn next ( & mut self ) -> Option < < Self as Iterator > :: Item > {
1290
1290
self . it . next ( ) . cloned ( )
1291
1291
}
1292
1292
@@ -1296,36 +1296,36 @@ impl<T, D, I> Iterator for Cloned<I> where
1296
1296
}
1297
1297
1298
1298
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1299
- impl < T , D , I > DoubleEndedIterator for Cloned < I > where
1300
- T : Clone ,
1301
- D : Deref < Target = T > ,
1302
- I : DoubleEndedIterator < Item = D > ,
1299
+ impl < I > DoubleEndedIterator for Cloned < I > where
1300
+ I : DoubleEndedIterator ,
1301
+ I :: Item : Deref ,
1302
+ < I :: Item as Deref > :: Target : Clone
1303
1303
{
1304
- fn next_back ( & mut self ) -> Option < T > {
1304
+ fn next_back ( & mut self ) -> Option < < Self as Iterator > :: Item > {
1305
1305
self . it . next_back ( ) . cloned ( )
1306
1306
}
1307
1307
}
1308
1308
1309
1309
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1310
- impl < T , D , I > ExactSizeIterator for Cloned < I > where
1311
- T : Clone ,
1312
- D : Deref < Target = T > ,
1313
- I : ExactSizeIterator < Item = D > ,
1310
+ impl < I > ExactSizeIterator for Cloned < I > where
1311
+ I : ExactSizeIterator ,
1312
+ I :: Item : Deref ,
1313
+ < I :: Item as Deref > :: Target : Clone
1314
1314
{ }
1315
1315
1316
1316
#[ unstable( feature = "core" , reason = "trait is experimental" ) ]
1317
- impl < T , D , I > RandomAccessIterator for Cloned < I > where
1318
- T : Clone ,
1319
- D : Deref < Target = T > ,
1320
- I : RandomAccessIterator < Item = D >
1317
+ impl < I > RandomAccessIterator for Cloned < I > where
1318
+ I : RandomAccessIterator ,
1319
+ I :: Item : Deref ,
1320
+ < I :: Item as Deref > :: Target : Clone
1321
1321
{
1322
1322
#[ inline]
1323
1323
fn indexable ( & self ) -> usize {
1324
1324
self . it . indexable ( )
1325
1325
}
1326
1326
1327
1327
#[ inline]
1328
- fn idx ( & mut self , index : usize ) -> Option < T > {
1328
+ fn idx ( & mut self , index : usize ) -> Option < < Self as Iterator > :: Item > {
1329
1329
self . it . idx ( index) . cloned ( )
1330
1330
}
1331
1331
}
@@ -1400,11 +1400,14 @@ pub struct Chain<A, B> {
1400
1400
}
1401
1401
1402
1402
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1403
- impl < T , A , B > Iterator for Chain < A , B > where A : Iterator < Item =T > , B : Iterator < Item =T > {
1404
- type Item = T ;
1403
+ impl < A , B > Iterator for Chain < A , B > where
1404
+ A : Iterator ,
1405
+ B : Iterator < Item = A :: Item >
1406
+ {
1407
+ type Item = A :: Item ;
1405
1408
1406
1409
#[ inline]
1407
- fn next ( & mut self ) -> Option < T > {
1410
+ fn next ( & mut self ) -> Option < A :: Item > {
1408
1411
if self . flag {
1409
1412
self . b . next ( )
1410
1413
} else {
@@ -1434,12 +1437,12 @@ impl<T, A, B> Iterator for Chain<A, B> where A: Iterator<Item=T>, B: Iterator<It
1434
1437
}
1435
1438
1436
1439
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1437
- impl < T , A , B > DoubleEndedIterator for Chain < A , B > where
1438
- A : DoubleEndedIterator < Item = T > ,
1439
- B : DoubleEndedIterator < Item =T > ,
1440
+ impl < A , B > DoubleEndedIterator for Chain < A , B > where
1441
+ A : DoubleEndedIterator ,
1442
+ B : DoubleEndedIterator < Item =A :: Item > ,
1440
1443
{
1441
1444
#[ inline]
1442
- fn next_back ( & mut self ) -> Option < T > {
1445
+ fn next_back ( & mut self ) -> Option < A :: Item > {
1443
1446
match self . b . next_back ( ) {
1444
1447
Some ( x) => Some ( x) ,
1445
1448
None => self . a . next_back ( )
@@ -1448,9 +1451,9 @@ impl<T, A, B> DoubleEndedIterator for Chain<A, B> where
1448
1451
}
1449
1452
1450
1453
#[ unstable( feature = "core" , reason = "trait is experimental" ) ]
1451
- impl < T , A , B > RandomAccessIterator for Chain < A , B > where
1452
- A : RandomAccessIterator < Item = T > ,
1453
- B : RandomAccessIterator < Item = T > ,
1454
+ impl < A , B > RandomAccessIterator for Chain < A , B > where
1455
+ A : RandomAccessIterator ,
1456
+ B : RandomAccessIterator < Item = A :: Item > ,
1454
1457
{
1455
1458
#[ inline]
1456
1459
fn indexable ( & self ) -> usize {
@@ -1459,7 +1462,7 @@ impl<T, A, B> RandomAccessIterator for Chain<A, B> where
1459
1462
}
1460
1463
1461
1464
#[ inline]
1462
- fn idx ( & mut self , index : usize ) -> Option < T > {
1465
+ fn idx ( & mut self , index : usize ) -> Option < A :: Item > {
1463
1466
let len = self . a . indexable ( ) ;
1464
1467
if index < len {
1465
1468
self . a . idx ( index)
@@ -1479,14 +1482,12 @@ pub struct Zip<A, B> {
1479
1482
}
1480
1483
1481
1484
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1482
- impl < T , U , A , B > Iterator for Zip < A , B > where
1483
- A : Iterator < Item = T > ,
1484
- B : Iterator < Item = U > ,
1485
+ impl < A , B > Iterator for Zip < A , B > where A : Iterator , B : Iterator
1485
1486
{
1486
- type Item = ( T , U ) ;
1487
+ type Item = ( A :: Item , B :: Item ) ;
1487
1488
1488
1489
#[ inline]
1489
- fn next ( & mut self ) -> Option < ( T , U ) > {
1490
+ fn next ( & mut self ) -> Option < ( A :: Item , B :: Item ) > {
1490
1491
match self . a . next ( ) {
1491
1492
None => None ,
1492
1493
Some ( x) => match self . b . next ( ) {
@@ -1515,12 +1516,12 @@ impl<T, U, A, B> Iterator for Zip<A, B> where
1515
1516
}
1516
1517
1517
1518
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1518
- impl < T , U , A , B > DoubleEndedIterator for Zip < A , B > where
1519
- A : DoubleEndedIterator + ExactSizeIterator < Item = T > ,
1520
- B : DoubleEndedIterator + ExactSizeIterator < Item = U > ,
1519
+ impl < A , B > DoubleEndedIterator for Zip < A , B > where
1520
+ A : DoubleEndedIterator + ExactSizeIterator ,
1521
+ B : DoubleEndedIterator + ExactSizeIterator ,
1521
1522
{
1522
1523
#[ inline]
1523
- fn next_back ( & mut self ) -> Option < ( T , U ) > {
1524
+ fn next_back ( & mut self ) -> Option < ( A :: Item , B :: Item ) > {
1524
1525
let a_sz = self . a . len ( ) ;
1525
1526
let b_sz = self . b . len ( ) ;
1526
1527
if a_sz != b_sz {
@@ -1540,17 +1541,17 @@ impl<T, U, A, B> DoubleEndedIterator for Zip<A, B> where
1540
1541
}
1541
1542
1542
1543
#[ unstable( feature = "core" , reason = "trait is experimental" ) ]
1543
- impl < T , U , A , B > RandomAccessIterator for Zip < A , B > where
1544
- A : RandomAccessIterator < Item = T > ,
1545
- B : RandomAccessIterator < Item = U > ,
1544
+ impl < A , B > RandomAccessIterator for Zip < A , B > where
1545
+ A : RandomAccessIterator ,
1546
+ B : RandomAccessIterator
1546
1547
{
1547
1548
#[ inline]
1548
1549
fn indexable ( & self ) -> usize {
1549
1550
cmp:: min ( self . a . indexable ( ) , self . b . indexable ( ) )
1550
1551
}
1551
1552
1552
1553
#[ inline]
1553
- fn idx ( & mut self , index : usize ) -> Option < ( T , U ) > {
1554
+ fn idx ( & mut self , index : usize ) -> Option < ( A :: Item , B :: Item ) > {
1554
1555
match self . a . idx ( index) {
1555
1556
None => None ,
1556
1557
Some ( x) => match self . b . idx ( index) {
@@ -2058,8 +2059,9 @@ pub struct Scan<I, St, F> {
2058
2059
}
2059
2060
2060
2061
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2061
- impl < A , B , I : Iterator < Item =A > , St , F > Iterator for Scan < I , St , F > where
2062
- F : FnMut ( & mut St , A ) -> Option < B > ,
2062
+ impl < B , I , St , F > Iterator for Scan < I , St , F > where
2063
+ I : Iterator ,
2064
+ F : FnMut ( & mut St , I :: Item ) -> Option < B > ,
2063
2065
{
2064
2066
type Item = B ;
2065
2067
0 commit comments