The draft C++ standard in section 5.8
Shift operators in paragraph 1 says(emphasis mine):
The type of the result is that of the promoted left operand. The behavior is undefined if the right operand is negative, or greater than or equal to the length in bits of the promoted left operand.
So if unsigned int is 32 bits
or less then this is undefined which is exactly the warning that gcc
is giving you.