The GCC developers talked about making uint8_t something other than unsigned char and figured they would probably get lynched if they did that (because uint8_t aliasing rules would be different).  While the standard agrees with you, practice is somewhat different.