std.range.Zip/zip  - multiple declarations
				Function zip
Iterate several ranges in lockstep. The element type is a proxy tuple
   that allows accessing the current element in the nth range by
   using e[n].
						
				auto zip(Ranges...)
				(
				
				  Ranges ranges
				
				)
				
				if (Ranges
				
				auto zip(Ranges...)
				(
				
				  StoppingPolicy sp,
				
				  Ranges ranges
				
				)
				
				if (Ranges
				zip is similar to lockstep, but lockstep doesn't
   bundle its elements and uses the opApply protocol.
   lockstep allows reference access to the elements in
   foreach iterations.
Parameters
| Name | Description | 
|---|---|
| sp | controls what zipwill do if the ranges are different lengths | 
| ranges | the ranges to zip together | 
Returns
At minimum, an input range. Zip offers the lowest range facilities
        of all components, e.g. it offers random access iff all ranges offer
        random access, and also offers mutation and swapping if all ranges offer
        it. Due to this, Zip is extremely powerful because it allows manipulating
        several ranges in lockstep.
Throws
An Exception if all of the ranges are not the same length and
        sp is set to StoppingPolicy.
Limitations
The @nogc and nothrow attributes cannot be inferred for
    the Zip struct because StoppingPolicy can vary at runtime. This
    limitation is not shared by the anonymous range returned by the zip
    function when not given an explicit StoppingPolicy as an argument.
Example
import stdExample
import stdExample
zip is powerful - the following code sorts two arrays in parallel:
import stdStruct Zip
Iterate several ranges in lockstep. The element type is a proxy tuple
   that allows accessing the current element in the nth range by
   using e[n].
						
				struct Zip(Ranges...)
				
				  
				
				if (Ranges
				zip is similar to lockstep, but lockstep doesn't
   bundle its elements and uses the opApply protocol.
   lockstep allows reference access to the elements in
   foreach iterations.
Constructors
| Name | Description | 
|---|---|
| this(rs, s) | Builds an object. Usually this is invoked indirectly by using the zipfunction. | 
Properties
| Name | Type | Description | 
|---|---|---|
| back[get] | ElementType | Returns the rightmost element. | 
| back[set] | ElementType | Returns the current iterated element. | 
| front[get] | ElementType | Returns the current iterated element. | 
| front[set] | ElementType | Sets the front of all iterated ranges. | 
| length[get] | auto | Returns the length of this range. Defined only if all ranges define length. | 
| save[get] | Zip | 
Methods
| Name | Description | 
|---|---|
| moveAt(n) | Destructively reads the nth element in the composite
   range. Defined if all ranges offer random access. | 
| moveBack() | Moves out the back. | 
| moveFront() | Moves out the front. | 
| opIndex(n) | Returns the nth element in the composite range. Defined if all
   ranges offer random access. | 
| opIndexAssign(v, n) | Assigns to the nth element in the composite range. Defined if
   all ranges offer random access. | 
| opSlice(from, to) | Returns a slice of the range. Defined only if all range define slicing. | 
| popBack() | Calls popBackfor all controlled ranges. | 
| popFront() | Advances to the next element in all controlled ranges. | 
Aliases
| Name | Description | 
|---|---|
| opDollar | Returns the length of this range. Defined only if all ranges define length. | 
Parameters
| Name | Description | 
|---|---|
| sp | controls what zipwill do if the ranges are different lengths | 
| ranges | the ranges to zip together | 
Returns
At minimum, an input range. Zip offers the lowest range facilities
        of all components, e.g. it offers random access iff all ranges offer
        random access, and also offers mutation and swapping if all ranges offer
        it. Due to this, Zip is extremely powerful because it allows manipulating
        several ranges in lockstep.
Throws
An Exception if all of the ranges are not the same length and
        sp is set to StoppingPolicy.
Limitations
The @nogc and nothrow attributes cannot be inferred for
    the Zip struct because StoppingPolicy can vary at runtime. This
    limitation is not shared by the anonymous range returned by the zip
    function when not given an explicit StoppingPolicy as an argument.
Example
import stdExample
import stdExample
zip is powerful - the following code sorts two arrays in parallel:
import stdAuthors
Andrei Alexandrescu, David Simcha, Jonathan M Davis, and Jack Stouffer. Credit for some of the ideas in building this module goes to Leonardo Maffi.