         return lock.read { [unowned self] in block(self.ward) }
     }
 
-    func read<U>(block: T throws -> U) throws -> U {
-        return try lock.read { [unowned self] in try block(self.ward) }
-    }
-
     func write(block: (inout T) -> Void) {
         lock.write({ block(&self.ward) })
     }


protocol ReadWriteLock {
    mutating func read<T>(block: () -> T) -> T
    mutating func read<T>(block: () throws -> T) rethrows -> T
    mutating func write(block: () -> Void, completion: (() -> Void)?)
}


        })
    }
}
