У меня такая же проблема в Ubuntu 10.04 с использованием gcc4.4, тот же код отлично работает на RH 5.5 с использованием gcc4.1
#include <sstream>
#include <iostream>
int main(int argc, char** argv) {
std::stringstream myStream;
myStream << "-123";
unsigned int myUInt;
myStream >> myUInt;
if(myStream.fail()) {
std::cout << "FAILED" << std::endl;
}
}
не дает FAILED, я уже нашел это:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39802
где было указано, что это было исправлено в gcc4.1, не уверен, что поведение этого промаха (если я что-то не упустил) связано с той же проблемой.