         }
     }
 
-    private init(_policy: objc_AssociationPolicy) {
+    fileprivate init(_policy: objc_AssociationPolicy) {
         self._policy = _policy
     }
 

            // type-check the ValueType instead of the value to avoid obj-c bridging.
            // This way we'll match the expected boxing behavior of the getter.
            // Hopefully the optimizer will strip this out for us.
            if ValueType.self is AnyObject {
                _set(object, newValue as! AnyObject?)
            } else if let v = newValue {
                _set(object, _AssocValueBox<ValueType>(v))
            } else {

    private let _key: _AssocKey = _AssocKey()
    
    private func _get(_ object: AnyObject) -> AnyObject? {
        let p = Unmanaged.passUnretained(_key).toOpaque()
        return objc_getAssociatedObject(object, p) as AnyObject?
    }
    
    private func _set(_ object: AnyObject, _ value: AnyObject?) {
        let p = Unmanaged.passUnretained(_key).toOpaque()
        objc_setAssociatedObject(object, p, value, _policy)
    }
}
