“こんなゾンビだらけの言語に居られるか!俺は他の言語に出て行くぜ!” -- 行方知れずのプログラマー
🧟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_ptr
auto_ptr_ref
C++11以降はunique_ptr
クラスで代替可能です。
関数アダプタ[C++11で非推奨, C++17で削除]
binary_function
binary_negate
bind1st
bind2nd
binder1st
binder2nd
const_mem_fun1_ref_t
const_mem_fun1_t
const_mem_fun_ref_t
const_mem_fun_t
mem_fun1_ref_t
mem_fun1_t
mem_fun_ref_t
mem_fun_ref
mem_fun_t
mem_fun
not1
not2
pointer_to_binary_function
pointer_to_unary_function
ptr_fun
unary_function
unary_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_unexpected
unexpected
unexpected_handler
set_unexpected
これらの関数が対象としていた例外指定(exception specification)はC++11で非推奨、C++17で削除されています。
未初期化ストレージ[C++17で非推奨, C++20で削除]
get_temporary_buffer
raw_storage_iterator
return_temporary_buffer
実質的に役に立たないとの判断です。直接代替する機能はありません。
リテラル型判定[C++17で非推奨, C++20で削除]
is_literal_type
is_literal_type_v
実質的に役に立たないとの判断です。直接代替する機能はありません。
result_of
メタ関数[C++17で非推奨, C++20で削除]
result_of
result_of_t
C++17以降はinvoke_result
メタ関数で代替可能です。
処理中例外カウント[C++20で削除]
uncaught_exception
C++17以降はuncaught_exceptions
関数で代替可能です(※末尾のs
有無)。
GCサポート[C++23で削除]
declare_no_pointers
declare_reachable
get_pointer_safety
pointer_safety
undeclare_no_pointers
undeclare_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で導入されていました。ご存じでした? ↩