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,をオーバーロードしてるかもしれないからです。