else節のないifを式でやる
:の片側は適当な式で埋めたconditional-expressionでもいいんだけどこういうのもアリね。
#include <iostream> struct hoge { void f() { std::cout << "hoge\n"; } }; int main() { hoge x; false && ((void)x.f(), 0); // if (false) { x.f(); } std::cout << "-----------------\n"; true || ((void)x.f(), 0); // Perl とかの unless 相当 }
結果:http://ideone.com/HJIbG
x.f()をvoidにキャストしてるのはx.f()の型がoperator,をオーバーロードしてるかもしれないからです。