C++1yでは、D言語にもあるstatic ifが提案されています。 宣言と文が現れるあらゆるところで使えるようにしよう、ということで考えられいて、ユースケースもいろいろ考えられています。 まず、コンパイル時条件によって処理を呼び分ける基本的な用途。 以下の、コンパイル時条件で分岐するような処理は、これまで関数オーバーロードでやっていました。 static if (sizeof(size_t) == 8) { // 64ビット版のコンパイルではこっち void fun(); } else { void gun(); } 次に、クラスの定数/型定義。 以下の階乗のような例は、これまで特殊化でやっていました。 template <unsigned long n> struct factorial { static if (n <= 1) { enum : unsigned long { val