我最近正在与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没有设置!
答案 0 :(得分:1)
specification(不带引号)说的是同样的话,是的。 (当然,首先跳过空白可能会引发其他某种故障。)我认为这是标准中的明显错误;我filed an issue。