friend range intersect(const range& a, const range& b) { return range(std::max(a.low(), b.low()), std::min(a.high(), b.high())); }
friend range unite(const range& a, const range& b) { return range(a.low() + b.low(), a.high() + b.high()); }
/// \em Right-Shift range \p a by \p b indexes. friend range operator - (const range& a, const T& b) { return range(a.low() + b, a.high() + b); }
/// Subtract the the begin and end limits of \p a and \p b. friend range operator - (const range& a, const range& b) { return range(a.low() + b.low(), a.high() + b.high()); }
/// @name Saturated Addition. /// \{ /// \em Right-Shift range \p b by \p a indexes. friend range operator + (const T& a, const range& b) { return range(a + b.low(), a + b.high()); }