Mã sau hoạt động với gcc 4.4.
Nhưng gcc 4.7 sẽ đưa ra lỗi xác nhận.GCC 4.7 istream :: tellg() trả về -1 sau khi đạt EOF
#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;
}
Trong gcc 4.7, nếu istream đã đạt đến EOF, tellg() sẽ trả về -1. không pubseekoff() cũng không seekoff() sẽ được gọi là Trong gcc 4.4 nó không phải là một vấn đề.
Hành vi nào là hành vi, gcc 4.4 hoặc gcc 4.7? Tại sao?
Một chút bối rối. Tại sao không phải là 'iss.eof()' đặt sau khi khai thác? –
Nó đã được sửa từ gcc 4.6, ở đây [là báo cáo lỗi] (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26211). –
Báo cáo lỗi đó không có quá nhiều mô tả. Các tập tin đã được thay đổi có liên quan với vấn đề hiện tại mặc dù. Làm cách nào bạn liên kết lỗi đó với sự cố hiện tại? –