virtual bool can_merge(const Condition &, const CompoundCondition &) const;
virtual RangeCondition<T> *merge(const std::vector<const Condition *> &, const CompoundCondition &) const;
virtual bool is_viable() const { return min<=max; }
virtual bool can_merge(const Condition &, const CompoundCondition &) const;
virtual RangeCondition<T> *merge(const std::vector<const Condition *> &, const CompoundCondition &) const;
virtual bool is_viable() const { return min<=max; }