bool operator<(const CIMDateTime& x, const CIMDateTime& y) { // see if they both the same type (intervals or date/times) or are different types. if (x.isInterval() ^ y.isInterval()) { // they're different. We define an interval to be < a date/time return x.isInterval(); } else { if (x.isInterval()) { // both intervals return StrictWeakOrdering( x.getDays(), y.getDays(), x.getHours(), y.getHours(), x.getMinutes(), y.getMinutes(), x.getSeconds(), y.getSeconds(), x.getMicroSeconds(), y.getMicroSeconds()); } else { // they're both date/times return StrictWeakOrdering( getMagnitude(x), getMagnitude(y), x.getMicroSeconds(), y.getMicroSeconds()); } } }