// 目標 // コンパイル時定数 exp が、 // 0 のとき : コンパイルエラー // 0 以外のとき : 実行時コスト0 (= コンパイル後のコードに現れない) // ような、StaticAssert(exp) を作る。 // [追加条件] // exp が コンパイル時に決まらない変数の場合もコンパイルエラーとなること。 // 上記目標が決まったので、目標にとって本質的でない isLittleEndianCPU() // には一旦退場願う。 #define StaticAssert(exp) (void)(exp) // ↑この定義を目標に合うように修正してゆく。 int main(void){ StaticAssert(1) ; // コンパイルを通ること StaticAssert(2) ; // コンパイルを通ること StaticAssert(0) ; // コンパイルエラーとなること int i = 1 ; StaticAssert(i) ; // コンパイルエラーとなること return 0 ; }