Почему istream_iterator<unsigned char, unsigned char> бросает std::bad_cast?
Что здесь происходит?
#include <iostream>
#include <iterator>
#include <sstream>
int main() {
std::basic_stringbuf<unsigned char> buf;
std::basic_istream<unsigned char> stream(&buf);
// the next line throws std::bad_cast on g++ 4.4
std::istream_iterator<unsigned char, unsigned char> it(stream);
}
я пробовал stream.write(some_array, sizeof(some_array)
перед построением итератора, безрезультатно.
Благодарю.
2 ответа
Решение
Он выбрасывает из конструктора объекта sentry, где он проверяет фасет ctype в потоке (он нужен ему, чтобы пропустить пробел), который оказывается NULL, потому что он не определен для неподписанных символов.
Вам нужно обрабатывать пробелы в этом потоке? Если нет, измените на
std::istreambuf_iterator<unsigned char> it(stream);
Не должно быть:
std::istream_iterator<unsigned char> it(stream);