template <class... Ts> struct tuple {};

 template <class T, class... Ts>
 struct tuple<T, Ts...> : tuple<Ts...> {
   tuple(T t, Ts... ts) : tuple<Ts...>(ts...), tail(t) {}
   T tail;
 };