続 std::basic_ostringstream
id:fifth_moon:20061106:1162823847 に id:nevil さんからコメントいただいたので追試してみました。
まず簡単なソースをでっちあげて gdb にかけてみます。
typedef unsigned short unishort; typedef std::basic_stringunistring; typedef std::basic_ostringstream ounistringstream; ounistringstream ounistrm; ounistrm << unishort(0x4230); std::cout << ounistrm.str().size() << std::endl;
すると、std::basic_ostream
ounistringstream& operator<<(ounistringstream& ostrm, const unishort us) { return ostrm; }
とすると std::ios_base::failbit が立ちません。そうゆうことか。
ounistringstream& operator<<(ounistringstream& ostrm, const unishort us) { ostrm.str(ostrm.str() += us); return ostrm; }
これで期待通りに動くようになりました。