>>446
いや、それは戻り値に評価されるから合法だと思うんだ。よくやるよね。
そうではなくて、コンストラクタの呼び出しをsizeofの引数に渡してる
んだよね。こういうやつ。

template<bool> struct CompileTimeChecker {
CompileTimeChecker(...);
};

template<> struct CompileTimeChecker<false> {

};

//macro definition
#define STATIC_CHECK(expr, msg) \
{ \
class ERROR_##msg{}; \
(void)sizeof(CompileTimeChecker<(expr) != 0>((ERROR_##msg()))); \
}

sizeof(CompileTimeChecker<(expr) != 0>((ERROR_##msg())));
が怒られる。