8

次のコード スニペットを検討してください。

#include <iostream>
#include <sstream>

int main()
{
    std::stringstream ss;
    ss << "12345";
    unsigned short s;
    ss >> s;
    ss << "foo";

    std::cout << std::boolalpha
              << "\nss.eof()  = " << ss.eof()
              << "\nss.good() = " << ss.good()
              << "\nss.bad()  = " << ss.bad()
              << "\nss.fail() = " << ss.fail()
              << "\nss.str()  = " << ss.str();
}

clang++ トランクは、次の結果を出力します。

ss.eof()  = true
ss.good() = false
ss.bad()  = false
ss.fail() = false
ss.str()  = 12345

ワンドボックスで


g++ トランクは次の結果を出力します。

ss.eof()  = true
ss.good() = false
ss.bad()  = false
ss.fail() = true
ss.str()  = 12345

ワンドボックスで


ご覧のとおり、 の値はss.fail()2 つのコンパイラ間で異なります。std::stringstreamこの場合の の動作に関して、規格は何と言っていますか? 既に消費されているストリームに書き込むときにfailbit/を設定するのは実装定義ですか?badbit

4

1 に答える 1