 
       /// A Buffer value with the high byte set
       internal static var _bufferHiByte: Buffer {
-        return 0xFF &<< numericCast((MemoryLayout<Buffer>.size &- 1) &* 8)
+        return 0xFF &<< ((MemoryLayout<Buffer>.size &- 1) &* 8)
       }
       
       /// Consume a byte of the given buffer: shift out the low byte
       /// and put FF in the high byte
       internal static func _nextBuffer(after thisBuffer: Buffer) -> Buffer {
-        return (thisBuffer &>> 8) | _bufferHiByte
+        return (thisBuffer &>> (8 as Buffer)) | _bufferHiByte
       }
 
       /// The position of `self`, rounded up to the nearest unicode

    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:

      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
