I have just installed the Windows SDK v7.1 (MSVC 10.0) and running my code through (almost) full warning level (W3, default for qmake's CONFIG += warn_on
) and am surprised about warning C4800: 'type' : forcing value to bool 'true' or 'false' (performance warning)
In the following code, stream
is an std::istream
and token
is a std::string
.
// in some function returning bool
return (stream >> token) // triggers warning c4800:
// '(void *)': forcing value to bool 'true' or 'false' (performance warning)`
// somewhere else
if( stream >> token ) // does not trigger warning c4800
What is going on here? I don't even get why the warning is triggered in the first place. I thought the first bit of code already returned a bool
anyways.
I understand this is nitpicking and the warning shouldn't even exist, but it's the only one in my code between MSVC's /W3
and gcc's -Wall -pedantic
, so I'd like to know :)
SMALL UPDATE: I understand that the warning is designed to let you know you're assuming int->bool conversion, but 1) why would you even still use bool (== why would an typedef int
mostly) and 2)if(2)
not convert 2
to true or false, I thought that was the whole idea of a predicate, being true or false.