Dangling else. These macros are the body of an if statement.
if (expression) FAIL(...)
That means they will bind to an immediately subsequent else, a bug.
This code should assert b if cond is true.
If cond is not true, eExpr should run.
Which doesn't run eExpr unless cond is true.
Should expose a stream() object to append detail. Some do. Many do not.
ASSERT_FOO(x, y, z) << "details go here: uid=" << uid << ", x=" << x;
The macros must be rewritten to follow a standard format.