The expression
ranges::empty(E) for some subexpression E is
expression-equivalent to:

- bool((E).empty()) if it is a valid expression.
- Otherwise, (ranges::size(E) == 0) if it is a valid expression.
- Otherwise, EQ, where EQ is bool(ranges::begin(E) == ranges::end(E)) except that E is only evaluated once, if EQ is a valid expression and the type of ranges::begin(E) models ForwardIterator.
- Otherwise, ranges::empty(E) is ill-formed.