 any C++ type.
Note that <code>void</code> and plain function types are valid 
C++ types, but objects of such types cannot exist. 
Hence, if a tuple type contains such types as elements, the tuple type
can exist, but not an object of that type.
There are natural limitations for element types that cannot
be be copied, or that are not default constructible (see 'Constructing tuples'
 below). 

<p>
For example, the following definitions are valid tuple instantiations (<code>A</code>, <code>B</code> and <code>C