“こんなゾンビだらけの言語に居られるか!俺は他の言語に出て行くぜ!” -- 行方知れずのプログラマー
🧟Zombie Names📛
C++17標準ライブラリ仕様から「Zombie names」というセクションが追加され、過去バージョンで利用していた識別子(クラス名や関数名など)が予約済みとして列挙されるようになりました。1
...嘘じゃないよ:https://eel.is/c++draft/zombie.names
C互換ライブラリ[C++11で非推奨, C++14で削除]
gets
バッファオーバーラン脆弱性につながるため、今すぐ利用停止してください。バッファサイズを明示指定するfgets関数で代替可能です。
スマートポインタauto_ptr<T>[C++11で非推奨, C++17で削除]
auto_ptrauto_ptr_ref
C++11以降はunique_ptrクラスで代替可能です。
関数アダプタ[C++11で非推奨, C++17で削除]
binary_functionbinary_negatebind1stbind2ndbinder1stbinder2ndconst_mem_fun1_ref_tconst_mem_fun1_tconst_mem_fun_ref_tconst_mem_fun_tmem_fun1_ref_tmem_fun1_tmem_fun_ref_tmem_fun_refmem_fun_tmem_funnot1not2pointer_to_binary_functionpointer_to_unary_functionptr_fununary_functionunary_negate
C++11以降はラムダ式(lambda expression)やbind、mem_fn、not_fn[C++17]、bind_front[C++20]各種アダプタで代替可能です。
ランダムシャッフル[C++14で非推奨, C++17で削除]
random_shuffle
C++11以降はshuffle関数で代替可能です。
例外指定違反ハンドラ[C++17で削除]
get_unexpectedunexpectedunexpected_handlerset_unexpected
これらの関数が対象としていた例外指定(exception specification)はC++11で非推奨、C++17で削除されています。
未初期化ストレージ[C++17で非推奨, C++20で削除]
get_temporary_bufferraw_storage_iteratorreturn_temporary_buffer
実質的に役に立たないとの判断です。直接代替する機能はありません。
リテラル型判定[C++17で非推奨, C++20で削除]
is_literal_typeis_literal_type_v
実質的に役に立たないとの判断です。直接代替する機能はありません。
result_ofメタ関数[C++17で非推奨, C++20で削除]
result_ofresult_of_t
C++17以降はinvoke_resultメタ関数で代替可能です。
処理中例外カウント[C++20で削除]
uncaught_exception
C++17以降はuncaught_exceptions関数で代替可能です(※末尾のs有無)。
GCサポート[C++23で削除]
declare_no_pointersdeclare_reachableget_pointer_safetypointer_safetyundeclare_no_pointersundeclare_reachable
結局誰にも利用されなかったため、C++23仕様にてGCサポートは削除されます(予定)。2
🦕🦖ところで🕵️♂️
C++言語仕様にはゾンビ(Zombie)の他にも、たくさんの恐竜たち や ジェームズ・ボンド(James Bond) が潜んでいたりします。にぎやかですね。
-
名前空間
std以下の識別子として予約済みというお話です。ユーザプログラムでこれらの名前を使えなくなる訳ではありません。本記事の内容とは別に、ユーザプログラムが名前空間stdに宣言・定義を追加することは禁止されています(一部特例を除く)。https://eel.is/c++draft/namespace.std ↩ -
C++言語におけるGC(ガベージコレクション)サポートとは、実際に動作可能なGC機構を提供するのでなく、将来誰かがGC機構を作るときに必要となるであろう低レイヤ機構のみを規定します。最近もどこかで見たC++言語あるあるパターン。このGCサポートはC++11で導入されていました。ご存じでした? ↩