Чтение набора битов <0> из istream всегда неудачно? - PullRequest
2 голосов
/ 04 апреля 2019

Я недавно работал с std::bitset<0> и заметил кое-что интересное с operator>>:

«Спецификация» гласит:

Если символы не извлекаются, вызывается is.setstate (ios_base :: failbit).

Это все еще применяется, когда "все возможные N символов" (с N == 0) были прочитаны? Если это так, означает ли это, что при попытке чтения из istream в bitset<0> всегда должно быть установлено failbit?

Следующий модульный тест не демонстрирует согласованного поведения во всех имеющихся у меня компиляторах:

BOOST_AUTO_TEST_CASE(io0) {
    try {
        std::stringstream ss{"1"};
        ss.exceptions(std::ios::badbit | std::ios::failbit);
        std::bitset<0> b;
        ss >> b;
        BOOST_TEST(false);
    } catch(...) {
        BOOST_TEST(true);
    }
}

MSVC 2019 устанавливает битовый бит, а GCC 7.3.0 - нет!

1 Ответ

1 голос
/ 04 апреля 2019

Спецификация (без кавычек) говорит то же самое, так что да. (Конечно, сначала пропуски пробелов могут спровоцировать какой-то другой сбой.) Я думаю, что это стандартная ошибка в стандарте; Я подал вопрос .

...