Я недавно работал с 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 - нет!