从istream读取bitset <0>总是失败吗?

时间:2019-04-04 00:01:26

标签: c++ iostream

我最近正在与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 个答案:

答案 0 :(得分:1)

specification(不带引号)说的是同样的话,是的。 (当然,首先跳过空白可能会引发其他某种故障。)我认为这是标准中的明显错误;我filed an issue