     }
 }
 
-extension Atomic {
-    
-    @_transparent
-    private func compareSet(oldVal: AtomicBase<Instance>, _ newVal: AtomicBase<Instance>) -> Bool {
+extension Atomic : SDAtomicType {
+    
+    @_transparent
+    private mutating func compareSet(oldVal: AtomicBase<Instance>, _ newVal: AtomicBase<Instance>) -> Bool {
         let _oldVal = Unmanaged.passUnretained(oldVal)
         let _newVal = Unmanaged.passRetained(newVal)
         @inline(__always)

extension Atomic : Equatable, Hashable {
    
    private var identifier: ObjectIdentifier {
        return ObjectIdentifier(self)
    }
    
    /// The hash value.


private final class AtomicBase<Instance> {
    
    let value: Instance
    
    init(value: Instance) {
        self.value = value
    }
}

public struct Atomic<Instance> {
    
    private var base: AtomicBase<Instance>
    
