Я всегда задавался вопросом, почему в библиотеке С++ Standard создан экземпляр basic_ [io] и все его варианты с использованием типа char вместо типа unsigned char. char означает (в зависимости от того, подписана она или нет) у вас может быть переполнение и недополнение для таких операций, как get(), что приведет к определенному реализацией значения переменных. Другим примером является то, что вы хотите вывести байт, неформатированный, в ostream, используя его функцию put.
Любые идеи?
Примечание. Я все еще не очень убежден. Поэтому, если вы знаете окончательный ответ, вы все равно можете опубликовать его.