 
 private struct Node<T>
 {
-  var next: UnsafeMutablePointer<Node<T>> = nil
-  let elem: UnsafeMutablePointer<T>
+  var nptr: UnsafeMutablePointer<Void> = nil
+  let elem: T
 
-  init(_ p: UnsafeMutablePointer<T>)
+  init(_ e: T)
   {
-    elem = p
+    elem = e
+  }
+
+  var next: UnsafeMutablePointer<Node<T>> {
+    get { return UnsafeMutablePointer<Node<T>>(nptr) }
+    set { nptr = UnsafeMutablePointer<Void>(newValue) }
   }
 }

    while UnsafePointer<COpaquePointer>(pool).memory != nil
    {
      let node = UnsafeMutablePointer<Node<T>>(OSAtomicDequeue(pool, 0))
      node.memory.elem.dealloc(1)
      node.dealloc(1)
    }
    // release the pool stack structure

    { // Promote the 2nd item to 1st
      head = node.memory.next

      let element = node.memory.elem
      node.destroy()
      OSAtomicEnqueue(pool, node, 0)
      return element
    }
