I'd actually argue for doing

    version(assert)
    {
        import core.exception;

        if(_empty || i == 0)
            throw new RangeError;
    }

since we now have `version(assert)`. That way, this functions pretty much just like it would with arrays (though `-noboundscheck` doesn't affect it, just `-release`).