 public protocol GWeakCapturing {
     init(raw: UnsafeMutableRawPointer)
 }
-
 
 @propertyWrapper
 public final class GWeak<T: ObjectProtocol & GWeakCapturing> {

        assign(newValue: wrappedValue) 
    }

    public convenience init(raw pointer: UnsafeMutableRawPointer?) {
        self.init(wrappedValue: pointer.flatMap(T.init(raw:)))
    }

    public convenience init(_ object: ObjectProtocol) {
        self.init(raw: object.ptr)
    }

    private func assign(newValue: T?) {

        set { assign(newValue: newValue) }
    }

    public init(wrappedValue: T?) {
        self.storage = UnsafeMutablePointer.allocate(capacity: 1)
        self.storage.pointee = UnsafeMutablePointer.allocate(capacity: 1)
