template <typename... TYPES>
struct tuple {
TYPES fields;...
};
If you're OK with brace elision, you can use multiple inheritance as a pack expansion:
template<class T, size_t> struct TupleElement { T value; };
template<class, class> struct TupleImpl;
template<template<class...> class L, class... Ts, size_t... Is>
struct TupleImpl<L<Ts...>, index_sequence<Is...>> : TupleElement<Ts, Is>... {};
template<class... Ts> struct Tuple : TupleImpl<index_sequence_for<Ts...>, Tuple<Ts...>> {};
Obviously data member pack expansions would be better, but this is something that you can use today.