以下の動作について、標準に説明はありますか?
次のコード:
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
    ostringstream os1;
    ostringstream os2;
    os1 << 1 << " " << 2;
    os2 << 1 << " " << 2 << " " << 3;
    const char *p = os1.str().c_str();
    cout << os2.str() << endl;
    cout << p << endl;
    return 0;
}
出力を表示します。
1 2 3
1 2 3
ただし、次のように表示されると思います。
1 2 3
1 2 
os1 オブジェクトが何らかの形で os2 の影響を受けているように見えます。os2.str() 呼び出しを削除すると、サンプルは正しく動作します。
Solaris Studio 12.2 と G++ 4.8.1 の例を試してみましたが、どちらも同じように動作します。
ご協力いただきありがとうございます!