N3760 [[deprecated]] attribute
機能(関数、クラス)が非推奨であることをコンパイラに伝える、deprecated属性の提案。
VC++もGCCも、昔から独自の属性構文でdeprecated機能を持っていました。GCCには4.8から、C++11の属性構文でgnu::deprecated属性が実装されています:
[[gnu::deprecated("please use new_func() function")]] void old_func() {} void new_func() {} int main() { old_func(); }
「この機能は古くて非推奨だから、新しく作ったこの機能を使ってください」というのを、コードで示し、非推奨機能を使っているユーザーに警告メッセージで通知するのに使用します。
標準ライブラリの範囲としては、C++11で、C++03のいくつかの機能を非推奨にしました(auto_ptr、bind1st、bind2nd、unary_function、binary_function、…)。auto_ptrの代わりにunique_ptr or shared_ptr、bind1stの代わりにbind、unary_functionの代わりにfunctionを使いましょう、といった推奨を示すために使用できますね。
この提案では、GCC 4.8のそれと同じく、メッセージを文字列リテラルで指定可能にすることが考えられています。
deprecated属性を指定可能なものとしては、以下のものが考えられています:
- クラス宣言
- typedef名
- 変数
- 非静的データメンバ
- 関数
- 列挙子
- テンプレートの特殊化