C言語のassertは実行時に式を評価するものであった。
C++11のstatic_assertはコンパイル時に式を評価する機能。
コンパイル時アサート - cpprefjp C++日本語リファレンス
static_assert.cppが、
// main関数 int main(){ // 変数の宣言 const int N = 4; // const int型Nを4で初期化. // コンパイル時アサーション. static_assert(N + N < 10, "10 assert!"); // N + Nが10以上ならアサーション. // プログラムの終了. return 0; // 0を返して正常終了. }
この場合、コンパイル時に"N + N < 10"は真なので、
$ vi static_assert.cpp $ g++ static_assert.cpp -o static_assert -std=c++11 $
何も起こらない。
一方で、
この場合、"N + N < 10"は偽なので、
$ vi static_assert.cpp $ g++ static_assert.cpp -o static_assert -std=c++11 static_assert.cpp: 関数 ‘int main()’ 内: static_assert.cpp:9:3: エラー: static assertion failed: 10 assert! static_assert(N + N < 10, "10 assert!"); // N + Nが10以上ならアサーション. ^~~~~~~~~~~~~ $
こうなる。
Sample/cpp/static_assert/static_assert/src/static_assert at master · bg1bgst333/Sample · GitHub