簡體   English   中英

從 istream 讀取 bitset<0> 總是失敗?

[英]Reading bitset<0> from istream always a failure?

我最近在使用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 沒有!

規范(沒有恐嚇引號)說了同樣的事情(當這個問題被問到時),所以是的。 (當然,首先跳過空格可能會引發其他類型的失敗。)我認為這是標准中的一個明顯錯誤,因此我提交了一個問題此問題已在 C++20 中得到解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM