C++1z 不明な属性を無視する

標準で定義される属性のほかに、実装定義の属性がありますが、その実装定義の属性を認識できない他の処理系では、その実装定義の属性は無視されることが規定されます。属性指定の文脈で#ifdefを書かなくてよくなります。

// GCC/Clangではgnu::deprecated属性が使用され、
// MSVC環境ではmaybe_raises_seh_exception (仮) が使用される
[[gnu::deprecated, msvc::maybe_raises_seh_exception]]
void f();

仕様としては、「認識できない属性トークンは、実装によって無視される」というものになります。実装ごとに適切な名前空間を用意することが推奨されるため、その処理系の名前空間内では、認識できない属性はコンパイルエラーか警告が出力されることになると考えられます。

参照

お断り

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