 
   @warn_unused_result
   public func advance(i: Index, by n: Index.Distance) -> Index {
+    _precondition(n >= 0,
+      "Can't advance an Index of MyForwardCollectionType by a negative amount")
     return i.advancedBy(n)
   }
 
   @warn_unused_result
   public func advance(i: Index, by n: Index.Distance, limit: Index) -> Index {
+    _precondition(n >= 0,
+      "Can't advance an Index of MyForwardCollectionType by a negative amount")
     let d = i.distanceTo(limit)
-    if d == 0 || (d > 0 ? d <= n : d >= n) {
+    _precondition(d >= 0,
+      "The specified limit is behind the index")
+    if d <= n {
       return limit
     }
     return i.advancedBy(n)

    return _elements[i]
  }
}

// FIXME: how does AnyCollection look like in the new scheme?


}

/*
public protocol MyRandomAccessIndexType : MyBidirectionalIndexType, MyStrideable,
  _RandomAccessAmbiguity {

