Исключения в boost :: iostreams :: multichar_input_filter исчезают при компиляции кода с помощью Visual Studio

, если вы хотите игнорировать «первый» элемент только тогда:

//li[position()>1]
or
(//a)[position()>1] 

, если вы хотите только последнее (например, ваш пример):

//li[last()]
or
(//a)[last()]
0
задан awagner 18 January 2019 в 12:29
поделиться

1 ответ

Я думаю, что это ошибка в старом gcc. Более новые gcc и VS правильно отлавливают выданное исключение и устанавливают флаг плохого бита вместо распространения исключения через потоковые методы. Мусор печатается, потому что c остается неинициализированным после неудачной попытки чтения. Вы можете сделать так, чтобы поток генерировал исключение битового бита, установив флаги исключений в потоке:

try
{
    io::filtering_istream in;
    in.exceptions(::std::ios_base::badbit | ::std::ios_base::failbit | ::std::ios_base::eofbit);
    in.push(TestFilter());
    in.push(source);
    char c;
    in >> c;
    cout << c;
} catch (boost::exception& e) {
    cout << "not expected boost exception";
    return 1;
}
catch(::std::exception const & e)
{
    cout << "Expected std exception";
    return 2;
}

также см. Документация по исключениям iostream

0
ответ дан VTT 18 January 2019 в 12:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: