次のコードはgcc4.4で動作します。
ただし、gcc4.7ではアサーションが失敗します。
#include <assert.h>
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
string input("abcdefg");
stringstream iss(input);
ostringstream oss;
oss << iss.rdbuf();
assert (!iss.eof());
(void) iss.peek();
assert (iss.eof());
// the following assertion will fail with gcc 4.7
assert( streamoff(iss.tellg()) ==
streamoff(input.length()) );
return 0;
}
gcc 4.7では、istreamがEOFに達した場合、tellg()は-1を返します。pubseekoff()もseekoff()も呼び出されません。gcc4.4では問題ありません。
gcc4.4とgcc4.7のどちらの動作が想定されていますか?なんで?