UL_CAST_UNQX_types_not_compatible() \
) \
)
+#define UL_CAST_UNQX_NULL_ALLOWED(ref_asterisks, new_type, expr) ( \
+ __builtin_choose_expr(!__builtin_types_compatible_p(void *, typeof(expr)), \
+ UL_CAST_UNQX(ref_asterisks, new_type, expr), \
+ expr \
+ ) \
+)
#else /*__GNUC__*/
#define UL_CAST_UNQX(ref_asterisks, new_type, expr) ((new_type)(expr))
#endif /*__GNUC__*/
#define UL_CAST_UNQ3(new_type, expr) \
UL_CAST_UNQX(**, new_type, expr)
+#ifndef UL_CAST_UNQX_NULL_ALLOWED
+#define UL_CAST_UNQX_NULL_ALLOWED(ref_asterisks, new_type, expr) \
+ UL_CAST_UNQX(ref_asterisks, new_type, expr)
+#endif /*UL_CAST_UNQX_NULL_ALLOWED*/
+
+#define UL_CAST_UNQ1_NULL_ALLOWED(new_type, expr) \
+ UL_CAST_UNQX_NULL_ALLOWED(*, new_type, expr)
+
#ifdef __cplusplus
} /* extern "C"*/
#endif