You could have types
__builtin_type_like_char_that_is_not_char
and
__builtin_type_like_uchar_that_is_not_uchar
See also this suggestion that the gcc people, true to form, considered making uint8_t something other than unsigned char: https://news.ycombinator.com/item?id=10868953