This seems like a potential solution to the problem of how to #define MY_ASSERT(x) in release mode such that it fails to compile if "x" is not a valid expression.
Previous I have used this idiom:
#define MY_ASSERT(expr) do {} while (false && (expr))
Another possible alternative might be:
#define MY_ASSERT(expr) sizeof(expr)