tuple(const tuple<VValues...>& other)
    : m_head(other.head()), inherited(other.tail())
 {}
 static const_type get(const tuple<Head, Values...>& t)  { return Next::get(t.tail()); }
bool operator<(const tuple<T, TTail...>& t, const tuple<U, UTail...>& u)
{
  return (t.head() < u.head() || 
          (!(t.head() < u.head()) && t.tail() < u.tail()));
}
 static type get(tuple<Head, Values...>& t)              { return Next::get(t.tail()); }
bool operator==(const tuple<T, TTail...>& t, const tuple<U, UTail...>& u)
{
  return t.head() == u.head() && t.tail() == u.tail();
}