struct Y
{
explicit operator bool() const { return true; } // explicit requires std=c++0x
};
int main()
{
Y a,b,c;
bool x = (bool) b; // cast required
if (a && b || c) { } // cast not required
if (a) { } // cast not required
for (;c;) { break; }
}
c3RydWN0IFkKewogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiB0cnVlOyB9IC8vIGV4cGxpY2l0IHJlcXVpcmVzIHN0ZD1jKysweAp9OwoKaW50IG1haW4oKQp7CiAgICBZIGEsYixjOwoKICAgIGJvb2wgeCA9IChib29sKSBiOyAgIC8vIGNhc3QgcmVxdWlyZWQKCiAgICBpZiAoYSAmJiBiIHx8IGMpIHsgfSAvLyBjYXN0IG5vdCByZXF1aXJlZAogICAgaWYgKGEpIHsgfSAgICAgICAgICAgLy8gY2FzdCBub3QgcmVxdWlyZWQKCiAgICBmb3IgKDtjOykgeyBicmVhazsgfQp9Cg==