Следующий код компилируется в Visual Studio 2008, но не работает в Visual Studio 2013 и более поздних версиях.
std::string str("foo");
std::stringstream ss(str);
float f = 0;
if ((ss >> f) == false)
std::cout << "Parse error\n";
Сообщение об ошибке
ошибка C2678: двоичный '==': оператор не найден, который принимает левый операнд типа 'std:: basic_istream > ' (или нет приемлемого преобразования)
и успешно фиксируется путем изменения следующим образом:
if (!(ss >> f))
std::cout << "Parse error\n";
Я не понимаю этого хорошо. Мой вопрос заключается в том, какие флаги оператора или cast или, возможно, ios
, которые позволяют считать чтение потока как булево в первую очередь, а затем почему недостаток operator==
нарушает его?