       self._endIndex = e
     }
 
+    // If not overridden, the default implementation provided by the Collection
+    // would be used, which unnecessarily penalizes algorithms that use
+    // UTF8View as a Sequence.
+    public var underestimatedCount: Int {
+      return _core.count
+    }
+
     /// A position in a string's `UTF8View` instance.
     ///
     /// You can convert between indices of the different string views by using

    public func index(after i: Index) -> Index {
      // FIXME: swift-3-indexing-model: range check i?
      let currentUnit = UTF8.CodeUnit(extendingOrTruncating: i._buffer)
      let hiNibble = currentUnit &>> 4

      // Amounts to increment the UTF-16 index based on the high nibble of a
      // UTF-8 code unit. If the high nibble is:

      
      // Map the high nibble of the current code unit into the
      // amount by which to increment the UTF-16 index.
      let increment = (u16Increments &>>
        Int(extendingOrTruncating: hiNibble &<< (1 as UTF8.CodeUnit))) & 0x3
      let nextCoreIndex = i._coreIndex &+ increment
      let nextBuffer = Index._nextBuffer(after: i._buffer)

