+/**
+ * Macro to swap \a a with \a b, with explicit type \a T for dumb C89 compilers.
+ *
+ * \note Arguments are evaluated multiple times.
+ */
+#define SWAP_T(a, b, T) \
+ do { \
+ T tmp; \
+ ASSERT_TYPE_IS(a, T); \
+ ASSERT_TYPE_IS(b, T); \
+ tmp = (a); \
+ (a) = (b); \
+ (b) = tmp; \
+ } while (0)
+
+