I should add that I have implemented some ranges where .front and
.popFront are both nothrow, as !empty doesn't "advance and cache"
for these ranges and the check is moved into an in{} contract.
For these ranges, they tend to behave like arrays with bounds
checking, only now the bounds checking is turned off by virtue of
-release.