@@ -691,13 +691,14 @@ pub trait IteratorExt<A>: Iterator<A> {
691691impl < A , I > IteratorExt < A > for I where I : Iterator < A > { }
692692
693693/// Extention trait for iterators of pairs.
694+ #[ unstable = "newly added trait, likely to be merged with IteratorExt" ]
694695pub trait IteratorPairExt < A , B > : Iterator < ( A , B ) > {
695696 /// Converts an iterator of pairs into a pair of containers.
696697 ///
697698 /// Loops through the entire iterator, collecting the first component of
698699 /// each item into one new container, and the second component into another.
699700 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 >
701702 {
702703 struct SizeHint < A > ( uint , Option < uint > ) ;
703704 impl < A > Iterator < A > for SizeHint < A > {
@@ -708,8 +709,11 @@ pub trait IteratorPairExt<A, B>: Iterator<(A, B)> {
708709 }
709710
710711 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) ) ;
713717
714718 for ( t, u) in self {
715719 ts. extend ( Some ( t) . into_iter ( ) ) ;
0 commit comments