std.typecons.Tuple/tuple  - multiple declarations
				Struct Tuple
Tuple of values, for example Tuple!(int, string) is a record that
stores an int and a string. Tuple can be used to bundle
values together, notably when returning multiple values from a
function. If obj is a Tuple, the individual members are
accessible with the syntax obj[0] for the first field, obj[1]
for the second, and so on.
						
				struct Tuple(Specs...)
				
				  
				
				if (distinctFieldNames!Specs);
						
					
				Constructors
| Name | Description | 
|---|---|
| this | Constructor taking one value for each field. | 
| this | Constructor taking a compatible array. | 
| this | Constructor taking a compatible Tuple. TwoTuples are compatible
 iff they are both of the same length, and, for each typeTon the
 left-hand side, the corresponding typeUon the right-hand side can
 implicitly convert toT. | 
Fields
| Name | Type | Description | 
|---|---|---|
| expand | Tuple | Use tfor aTupletto expand it into its
 components. The result ofexpandacts as if theTuple's components
 were listed as a list of values. (Ordinarily, aTupleacts as a
 single value.) | 
Properties
| Name | Type | Description | 
|---|---|---|
| slice[get] | inout(Tuple!(sliceSpecs!(from,to))) | Takes a slice by-reference of this Tuple. | 
Methods
| Name | Description | 
|---|---|
| opAssign | Assignment from another Tuple. | 
| opBinary | Concatenate Tuples.
         Tuple concatenation is only allowed if all named fields are distinct (no named field of this tuple occurs in tand no named field oftoccurs in this tuple). | 
| opBinaryRight | Concatenate Tuples.
         Tuple concatenation is only allowed if all named fields are distinct (no named field of this tuple occurs in tand no named field oftoccurs in this tuple). | 
| opCmp | Comparison for ordering. | 
| opEquals | Comparison for equality. Two Tuples are considered equal
 iff they fulfill the following criteria: | 
| rename | Renames the elements of a Tuple. | 
| rename | Overload of renamethat takes an associative arraytranslateas a template parameter, where the keys are
 either the names or indices of the members to be changed
 and the new names are the corresponding values.
 Every key intranslatemust be the name of a member of thetuple.
 The same rules for empty strings apply as for the variadic
 template overload ofrename. | 
| toHash | Creates a hash of this Tuple. | 
| toString | Converts to string. | 
| toString | Formats Tuplewith either%s,%(inner%)or%(inner%|sep%). | 
Aliases
| Name | Description | 
|---|---|
| fieldNames | The names of the Tuple's components. Unnamed fields have empty names. | 
| Types | The types of the Tuple's components. | 
See Also
Parameters
| Name | Description | 
|---|---|
| Specs | A list of types (and optionally, member names) that the Tuplecontains. | 
Example
Tuple!(int, int) point;
// assign coordinates
point[0] = 5;
point[1] = 6;
// read coordinates
auto x = point[0];
auto y = point[1];
Example
Tuple members can be named. It is legal to mix named and unnamed
    members. The method above is still applicable to all fields.
alias Entry = Tuple!(int, "index", string, "value");
Entry e;
eExample
A Tuple with named fields is a distinct type from a Tuple with unnamed
    fields, i.e. each naming imparts a separate type for the Tuple. Two
    Tuples differing in naming only are still distinct, even though they
    might have the same structure.
Tuple!(int, "x", int, "y") point1;
Tuple!(int, int) point2;
assert(!is(typeof(point1) == typeof(point2)));
Example
Use tuples as ranges
import stdExample
Concatenate tuples
import stdTemplate tuple
Constructs a Tuple object instantiated and initialized according to
    the given arguments.
						
				template tuple(Names...)
				;
						
					
				Contained Functions
| Name | Description | 
|---|---|
| tuple | 
Parameters
| Name | Description | 
|---|---|
| Names | An optional list of strings naming each successive field of the Tupleor a list of types that the elements are being casted to.
                For a list of names,
                each name matches up with the corresponding field given byArgs.
                A name does not have to be provided for every field, but as
                the names must proceed in order, it is not possible to skip
                one field and name the next after it.
                For a list of types,
                there must be exactly as many types as parameters. | 
Example
auto value = tuple(5, 6.7, "hello");
writeln(value[0]); // 5
writeln(value[1]); // 6.7
writeln(value[2]); // "hello"
// Field names can be provided.
auto entry = tuple!("index", "value")(4, "Hello");
writeln(entryAuthors
Andrei Alexandrescu, Bartosz Milewski, Don Clugston, Shin Fujishiro, Kenji Hara