 
   /// create an empty buffer
   public init() {
-    _base = unsafeBitCast(_emptyArrayStorage, _HeapBuffer<_ArrayBody, T>.self)
+    __bufferPointer = ManagedBufferPointer(
+      unsafeBufferObject: _emptyArrayStorage)
   }
 
   /// Adopt the storage of x

  }

  typealias _Base = _HeapBuffer<_ArrayBody, T>
  var _base: _Base
}

/// Append the elements of rhs to lhs

      self = _ContiguousArrayBuffer<T>()
    }
    else {
      __bufferPointer = ManagedBufferPointer(
        bufferClass: _ContiguousArrayStorage<T>.self,
        minimumCapacity: realMinimumCapacity
      ) {_,_ in _ArrayBody() }
      
      let verbatim = _isBridgedVerbatimToObjectiveC(T.self)
      
      __bufferPointer.value = _ArrayBody(
        count: count, capacity: _base._capacity(),
        elementTypeIsBridgedVerbatim: verbatim)
    }
  }

  init(_ storage: _ContiguousArrayStorageBase?) {
    __bufferPointer = ManagedBufferPointer(
      unsafeBufferObject: storage ?? _emptyArrayStorage)
  }

  public var hasStorage: Bool {
