なんとなくmingwのバグだと思うんですが,どこにバグが存在するか自分には追跡できません.
たとえば以下のようなコードです.
cygwinのg++だとうまく動く(0x0から0xffまで標準出力に出力される)んですが,mingwだと
どうもeofやらfailビットやらのセットの仕方をmingw側がミスってるようなのです.
何か対処法はあるでしょうか.

// ---
#include <iostream>
#include <fstream>

#define DATAFILE "mingw-test.dat"

int main()
{
using namespace std;

// generate data file
ofstream ofs(DATAFILE);
for(int i = 0; i < 256; i++) {
ofs.put(i);
}
ofs.close();

// read data file
ifstream ifs(DATAFILE);
cout << hex;
while(!ifs.eof() && !ifs.fail()) {
cout << ifs.get() << endl;
}
return 0;
}