У меня такая же проблема в Ubuntu 10.04 с использованием gcc4.4, тот же код работает штраф на RH 5.5 с помощью gcc4.1stringstream не отвечает «потоковым» отрицательным значениям в неподписанных типах?
#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, не уверен, что если мисс вести себя (если я что-то отсутствует) связана с той же проблемой.
Потому что на RH5.4 с компилятором 4.1 он терпит неудачу. Также я не уверен в том, что stringstream должен вести себя как scanf. Не говоря уже о том, что boost :: lexical_cast полагается на то, что он должен потерпеть неудачу, я действительно обнаружил, что строка string не терпит неудачу из-за того, что boost :: lexical_cast ("- 123") не бросает. Ссылка, которую вы указали в конце, что она будет исправлена для 4.4.1, но актуальна, что сбой кода с 4.4.3 –
@kalman Да, это ошибка! Это было в 4.1, и было исправлено позже. Кроме того, вы можете видеть из другого вопроса, что есть некоторые дебаты о том, что такое «правильное поведение2». – 2010-08-04 15:50:14
Итак, вы имеете в виду, что строка stringstream не работает при потоковой передаче «-123» в неподписанном типе, это была ошибка, а не функция? –