¿Cómo dividir una tupla?

Dado un

   template<typename First, typename... Tail>
   struct something
   {
       std::tuple<First, Tail...> t;
   };

¿Cómo puedo obtener unstd::tuple<Tail...> que contiene todos los elementos det ¿A excepción del primero?

Creo que esta es una pregunta interesante en general, pero aquí está mi motivación para el contexto:

Me gustaría implementar un hash para tuplas. solíaesta respuesta como base. Encontré que había un error en eso, a saber, no llamaroperator() del objeto hash con un valor:

return left() ^ right();

Debiera ser:

return left(std::get<0>(e)) ^ right(???);

Los ??? serían los elementos restantes de la tupla para continuar la creación de instancias recursiva de la plantilla. Aquí está el código completo incluyendo la parte de terminación:

#include <functional>
#include <utility>

namespace std
{

template<typename First, typename... Tail>
struct hash<std::tuple<First, Tail...>>
{
    typedef size_t result_type;
    typedef std::tuple<First, Tail...> argument_type;

    result_type operator()(argument_type const& e) const
    {
        std::hash<First> left;
        std::hash<std::tuple<Tail...>> right;
        return left(std::get<0>(e)) ^ right(???);
    }
};

template<>
struct hash<std::tuple<>>
{
    typedef size_t result_type;
    typedef std::tuple<> argument_type;

    result_type operator()(argument_type const& e) const
    {
        return 1;
    }
};

}

Respuestas a la pregunta(6)

Su respuesta a la pregunta