 extension Bool : SDAtomicProtocol {
     
     /// Atomic fetch the current value with barrier.
-    public mutating func fetch() -> Bool {
-        return _AtomicLoadBoolBarrier(&self)
+    public mutating func fetchSelf() -> (self: Bool, value: Bool) {
+        let val = _AtomicLoadBoolBarrier(&self)
+        return (val, val)
     }
     
     /// Atomic sets the value with barrier.

extension UnsafeRawPointer : SDAtomicProtocol {
    
    /// Atomic fetch the current value with barrier.
    public mutating func fetch() -> UnsafeRawPointer {
        @_transparent
        func load(_ theVal: UnsafeMutablePointer<UnsafeRawPointer>) -> UnsafeMutableRawPointer {
            return theVal.withMemoryRebound(to: Optional<UnsafeRawPointer>.self, capacity: 1) { _AtomicLoadPtrBarrier($0) }
        }
        return UnsafeRawPointer(load(&self))
    }
    
    /// Atomic sets the value with barrier.

extension Int8 : SDAtomicProtocol {
    
    /// Atomic fetch the current value with barrier.
    public mutating func fetchSelf() -> (self: Int8, value: Int8) {
        let val = _AtomicLoad8Barrier(&self)
        return (val, val)
    }
    
    /// Atomic sets the value with barrier.
