static inline bool _eval(const T0& head, const tdata<T1, Ts...>& tail, const U& arg, const Us&... args) { return cmp(head, arg) && _eval(tail.head, tail.tail(), args...); }
static inline bool _eval(const Head& head, const tdata<Tail0,Tail...>& tail, const Arg0& arg0, const Args&... args) { return cmp(head, arg0) && _eval(tail.head, tail.tail(), args...); }