static_assert

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