template <typename T>

struct cmp_is_expensive

Type traits to decide whether we can use 'cmp' directly or if we need to

split the computation.