@@ -691,13 +691,14 @@ pub trait IteratorExt<A>: Iterator<A> {
691
691
impl < A , I > IteratorExt < A > for I where I : Iterator < A > { }
692
692
693
693
/// Extention trait for iterators of pairs.
694
+ #[ unstable = "newly added trait, likely to be merged with IteratorExt" ]
694
695
pub trait IteratorPairExt < A , B > : Iterator < ( A , B ) > {
695
696
/// Converts an iterator of pairs into a pair of containers.
696
697
///
697
698
/// Loops through the entire iterator, collecting the first component of
698
699
/// each item into one new container, and the second component into another.
699
700
fn unzip < FromA , FromB > ( mut self ) -> ( FromA , FromB ) where
700
- FromA : FromIterator < A > + Extend < A > , FromB : FromIterator < B > + Extend < B >
701
+ FromA : Default + Extend < A > , FromB : Default + Extend < B >
701
702
{
702
703
struct SizeHint < A > ( uint , Option < uint > ) ;
703
704
impl < A > Iterator < A > for SizeHint < A > {
@@ -708,8 +709,11 @@ pub trait IteratorPairExt<A, B>: Iterator<(A, B)> {
708
709
}
709
710
710
711
let ( lo, hi) = self . size_hint ( ) ;
711
- let mut ts: FromA = FromIterator :: from_iter ( SizeHint ( lo, hi) ) ;
712
- let mut us: FromB = FromIterator :: from_iter ( SizeHint ( lo, hi) ) ;
712
+ let mut ts: FromA = Default :: default ( ) ;
713
+ let mut us: FromB = Default :: default ( ) ;
714
+
715
+ ts. extend ( SizeHint ( lo, hi) ) ;
716
+ us. extend ( SizeHint ( lo, hi) ) ;
713
717
714
718
for ( t, u) in self {
715
719
ts. extend ( Some ( t) . into_iter ( ) ) ;
0 commit comments