Почему istream_iteratorбросить std :: bad_cast? - PullRequest
2 голосов
/ 31 августа 2010

Что происходит?

#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 ]

2 голосов
/ 31 августа 2010

Он выбрасывает из конструктора объекта sentry, где он проверяет фасет ctype в потоке (он нуждается в нем, чтобы пропустить пробел), который оказывается NULL, потому что он не определен для неподписанных символов.

Вам нужно обрабатывать пробелы в этом потоке? Если нет, измените на

std::istreambuf_iterator<unsigned char> it(stream);
0 голосов
/ 31 августа 2010

не должно быть:

std::istream_iterator<unsigned char> it(stream);
...