https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110798
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to miles from comment #0) > typedef char ch_t; > assert( sizeof(unsigned char) == 1); //right > assert( sizeof(ch_t) == 1 ); //right > assert( sizeof(unsigned ch_t) == 1); //the only one right This is not valid C++, you can't use 'signed' and 'unsigned' with typedefs. Use std::make_unsigned_t<ch_t>