      "Only BidirectionalIndexType can be advanced by a negative amount")

    var i = i
    for var offset: Index.Distance = 0; offset != n && i != limit; ++offset {
      _nextInPlace(&i)
    }
    return i
  }

  @warn_unused_result
  public func advance(i: Index, by n: Index.Distance) -> Index {
    return self._advanceForward(i, by: n)