С std::istream
вы не можете использовать unsigned char
явно, потому что это typedef для std::basic_istream<char>
docs . Вы можете привести свои буферные указатели к char*
this->setg(reinterpret_cast<char*>(begin), reinterpret_cast<char*>(begin), reinterpret_cast<char*>(end));
Обратите внимание, что преобразование значений, превышающих CHAR_MAX
в char
, определяется реализацией, определенной (конечно, только если вы на самом деле используйте эти значения как char
).
Или вы можете попробовать использовать std::basic_istream<unsigned char>
(хотя я еще не пробовал).