+// Releases CF unless it's NULL. Always returns NULL, for your convenience and constructs like:
+// return CFReleaseSafe(foo);
+#define CFReleaseSafe(CF) ({ __typeof__(CF) _cf = (CF); (_cf ? (CFRelease(_cf), ((__typeof__(CF))0)) : _cf); })
+
+
+#if 0
+// Objective-C defines &<bridged-object> to be a constant reference, which we can't assign to, so we
+// suffer multiple evaluations of arguments (avoid using it with side-effects) to make things compile well
+
+#define CFTransferRetained(VAR1, VAR2) ({ CFReleaseSafe(VAR1); VAR1 = VAR2; VAR2 = ((__typeof__(VAR2))0)); })
+
+#define CFAssignRetained(VAR, CF) ({ CFReleaseSafe(VAR); VAR1 = CF; CF = ((__typeof__(CF))0)); })
+
+#define CFRetainAssign(VAR,CF) ({ CFReleaseSafe(VAR); VAR = CFRetainSafe(CF); })
+
+#define CFReleaseNull(CF) ({ CFReleaseSafe(CF); CF = ((__typeof__(CF))0)); })
+
+#else
+