     return p.allocatedElementCount
   }
 
-  /// Call `body` with an `UnsafeMutablePointer` to the stored `Value`
+  /// Call `body` with an `UnsafeMutablePointer` to the stored
+  /// `Value`.  **Note**: this pointer is only valid
+  /// for the duration of the call to `body`.
   public final func withUnsafeMutablePointerToValue<R>(
     body: (UnsafeMutablePointer<Value>)->R
   ) -> R {
     return withUnsafeMutablePointers { (v, e) in return body(v) }
   }
   
-  /// Call body with an `UnsafeMutablePointer` to the `Element` storage
+  /// Call `body` with an `UnsafeMutablePointer` to the `Element`
+  /// storage.  **Note**: this pointer is only valid
+  /// for the duration of the call to `body`.
   public final func withUnsafeMutablePointerToElements<R>(
     body: (UnsafeMutablePointer<Element>)->R
   ) -> R {
     return withUnsafeMutablePointers { return body($0.1) }
   }
 
-  /// Call body with `UnsafeMutablePointer`\ s to the stored `Value`
-  /// and raw `Element` storage
+  /// Call `body` with `UnsafeMutablePointer`\ s to the stored `Value`
+  /// and raw `Element` storage.  **Note**: these pointers are only valid
+  /// for the duration of the call to `body`.
   public final func withUnsafeMutablePointers<R>(
     body: (_: UnsafeMutablePointer<Value>, _: UnsafeMutablePointer<Element>)->R
   ) -> R {

  /// The stored `Value` instance.
  public var value: Value {    
    address {
      return withUnsafeMutablePointerToValue { UnsafePointer($0) }
    }
    mutableAddress {
      return withUnsafeMutablePointerToValue { $0 }
    }
  }


    minimumCapacity: Int,
    initialValue: (buffer: AnyObject, allocatedCount: (AnyObject)->Int)->Value
  ) {
    self = ManagedBufferPointer(bufferClass: bufferClass, minimumCapacity: minimumCapacity)

    // initialize the value field
    withUnsafeMutablePointerToValue {
      $0.initialize(
        initialValue(
          buffer: self.buffer,
          allocatedCount: {
            ManagedBufferPointer(unsafeBufferObject: $0).allocatedElementCount
          }))
