Because every non zero value cast to bool evaluates to true. That's how it is. I guess I could blabber something about assembly instructions to show that is makes sense, but there really is no point. Computers and programming languages are made by people. They have conventions in them, just like anything else. Deal with it.
Not even that, I don't evah want to deal with things that break 'the rules'. I don't want to have to know every niche thing about a class, because it has 1 bizarre non intuitive mechanic
The point Mathead200 was trying to make was that you can design your class however you want, but if you make it counter-intuitive then as you said it gets confusing.
When you cast an int to a bool (whether it be implicit or explicit) it returns true iff the int != 0. That's just how the casting operation is defined for the intrinsic type int. That was my point; that's just how to C++ standard defined it. My class “FedUpInt” uses a Unix-style (shell-style) cast. (I know, shell doesn't actually cast data.) 0 meaning true, and non 0 meaning false. That's just how I (or I guess they) defined it.