I've just looked at a Google coding standards document for C++ in which the arguments for not using unsigned integers are incomprehensible.
http://google-styleguide.googlecode.com/svn/trunk/cppguide.html
At one point it states this:
"Consider:
for (unsigned int i = foo.Length()-1; i >= 0; --i) ...
This code will never terminate!"
The fact that you can write stupid code which includes the type 'unsigned' does not seem to me to be a good reason not to use 'unsigned'. I can write stupid code using any C type you like.
Perhaps you could point to the good arguments that you found.