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