This expands checking for more expressions. This will check underflow and loss of precision when using call expressions like:
void foo(unsigned); int i = -1; foo(i);
This also includes other expressions as well, so it can catch negative indices to std::vector since it uses unsigned integers for [] and .at() function.