In the C++ standard, std::ios::openmode, std::ios::fmtflags and std::ios::iostate are implementation defined. But std::ios::goodbit is standardized to be equal to zero. My question is : can these bitmask be casted to boolean values according to the standard. In other words, to test if an error flag is set, can we type :
inline void myFunction(std::ios::iostate x = std::ios::goodbit)
{
if (x) { // <- is it ok or do I have to type "if (x != std::ios::goodbit)" ?
/* SOMETHING */
}
}
No this is not portable code. std::ios::iostate is a Bitmask type which, according to the C++ standard (17.5.2.1.3):
If iostate is implemented in terms of the latter case, then your code will fail to compile as std::bitset has neither an operator bool nor is it implicitly convertible to an integral type (as in your case).
Note:
The following fails to compile:
while this works: