point2<T> overlap( const point2<T>& pt, const rect2<T>& rect ) { // check if either is null if( pt == point2<T>::null( ) || rect == rect2<T>::null( ) ) { return point2<T>::null( ); } // general case else if( greater_equal( pt.x, rect.l ) && less_equal( pt.x, rect.r ) && greater_equal( pt.y, rect.t ) && less_equal( pt.y, rect.b ) ) { return pt; } else { return point2<T>::null( ); } }
constexpr auto operator>=(T t, U u) { return greater_equal(t, u); }