if ( (bool) b ) は単にbをキャストしているだけで
bそのものがブール値だと明確になっていない(int bかも知れない)ので駄目。

b および bなんたら はブール値と命名規則で
決められているのならいいけど。