C++1z static_assertのメッセージ省略を許可

C++11から導入されたコンパイル時アサートのstatic_assertですが、「式が真であると表明したいだけなのに、メッセージを指定しなければならないのがめんどくさい」という問題がありました。

この問題のために、ユーザーが以下のようにメッセージを省略するマクロをよく用意することになっていました。

// 指定した式を文字列化したものを、static_assertのメッセージとする
#define STATIC_ASSERT(EXPR) static_assert(EXPR, #EXPR)

C++1zからは、static_assertの第2引数であるメッセージが省略できるようになります。

constexpr int a = 1;
constexpr int b = 1;

static_assert(a == b);                      // 新機能。デフォルトのメッセージを使用する
static_assert(a == b, "a must equal to b"); // 従来のメッセージを明示的に渡す方法

メッセージを省略した場合、表明に失敗した際に出力されるメッセージの内容は未規定です。

参照

お断り

この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。