Почему 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);
Другие вопросы по тегам