In this answer I talk about using a std::ifstream
object\'s conversion to bool
to test whether the stream is still in a good state. I looked in th
This is an instance of the "safe bool" problem.
Here is a good article: http://www.artima.com/cppsource/safebool.html .
C++0x helps the situation with explicit
conversion functions, as well as the change that Kristo mentions. See also Is the safe-bool idiom obsolete in C++11? .
It looks like the C++0x standard section 27.4.4.3 has the answer (emphasis mine).
operator unspecified-bool-type() const;
Returns: If
fail()
then a value that will evaluate false in a boolean context; otherwise a value that will evaluate true in a boolean context. The value type returned shall not be convertible toint
.Note: This conversion can be used in contexts where a
bool
is expected (e.g., an if condition); however, implicit conversions (e.g., toint
) that can occur withbool
are not allowed, eliminating some sources of user error.
The newest C++11 requires that:
explicit operator bool() const;
See C++11 27.5.5.4-1. The 'explicit' seems odd to me, though.