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の以下の階層の下に解説ページを用意する予定です。