This website teach us how to implement a simple std::tuple, but there are a piece of codes I do not understand
template <size_t k, class... Ts> typename std::enable_if< k == 0, typename elem_type_holder<0, tuple<Ts...>>::type&>::type get(tuple<Ts...>& t) { return t.tail; } template <size_t k, class T, class... Ts> typename std::enable_if< k != 0, typename elem_type_holder<k, tuple<T, Ts...>>::type&>::type get(tuple<T, Ts...>& t) { //Why t could assign to different type? tuple<Ts...>& base = t; return get<k - 1>(base); } My question is
tuple<T, Ts...> and
tuple<Ts...> are different types, how could it work?
Edit : I think I found the answer, because
tuple<Ts...> is base class of
tuple<T,Ts...>
Ts...type list can consist ofT, Ts...so they can be the same type.Ts...an infinite list.