Note that lambda expressions are not allowed in an unevaluated context. What about this?
#define MY_ASSERT(expr) do {} while (false && ((expr), false))
This doesn't require expr to be convertible to bool.