I stumble on the following problem a lot:
Consider iterating over an array. I like to use an unsigned value for the array index - it's cleaner. size_t, for instance, is unsigned. The dogmatic iteration is:
for (size_t i = 0; i < SIZE; ++i) ...
But sometimes, a poor 'n innocent soul wants to iterate over the array backwards, and writes this code:
for (size_t i = SIZE - 1; i >= 0; --i) ...
Noticed the bug ?
Not yet ? Think what happens on the last iteration. i is 0, we end the iteration, decrease it and test against 0. You'd expect this test to fail and the loop to exit, right ? Wrong. i is likely to be 4294967295 (on 32-bit machines...), not 0, since size_t is unsigned !
So, there's no clean way to do this iteration, it seems (clean = without index arithmetic). In C++ you should really use iterators though :-)