The following paper is the first proposal I found for template parameter packs.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1603.pdf
At page 16,
C++11 doesn't have corresponding operators which is the reason they are proposed. With C++11 you'll need to either extract the corresponding information yourself or use a class which already does the necessary operation. The easiest approach is probably to just use std::tuple which already implements the corresponding logic.
If you wonder how std::tuple currently implements these operations: it is basically an exercise in functional programming using a fairly bad functional programming notation. Once you know how to get the n-th type of the sequence, getting the n-th element using inheritance from base classes parameterized on index and type is fairly trivial. Implementing something like tuple_element could look something like this:
template
struct tuple_element;
template
struct tuple_element<0, T0, T...> {
typedef T0 type;
};
template
struct tuple_element {
typedef typename tuple_element::type type;
};
The actual more challenging bit in implementing something like std::tuple is conjuring up a list of indices so you got a parallel list of type and integers which can then be expanded, e.g., for a list of base classes using something like (how the internal details look exactly will differ but the basic idea of having a parallel parameters packs for the types and their indices will be somehow there):
template
class tuple_base, tuple_indices>:
public tuple_field... {
};