samedi 6 janvier 2018

Implement details of std::tuple

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...>

Aucun commentaire:

Enregistrer un commentaire