C++ 標準は、セクション 4.12 で次のように述べています。
算術、列挙、ポインター、またはメンバー型へのポインターの右辺値は、bool 型の右辺値に変換できます。ゼロ値、ヌル ポインター値、またはヌル メンバー ポインター値は false に変換され、その他の値は true に変換されます。
つまり、次のコードは有効です。
if(5)
std::cout << "WOW!";
構文的には有効ですが、意味的には意味がありません。私の質問は、なぜ C++ がそのような奇妙なことを許可しているのかということです。私の知る限り、それは混乱を招くのではなく、何の利点もありません。