r was actually advanced, which may be less than n if
r did not have at least n elements.
popFrontN eagerly advances r itself (not a copy) up to n times (by calling r.popFront). popFrontN takes r by ref, so it mutates the original range. Completes in 1 steps for ranges that support slicing and have length. Completes in n time for all other ranges.
popBackN behaves the same as popFrontN but instead removes elements from the back of the (bidirectional) range instead of the front.
r was actually advanced, which may be less than n if
r did not have at least n elements.