LoginSignup
8

More than 1 year has passed since last update.

⚰️C++的ゾンビのお名前🧟

Last updated at Posted at 2021-12-09

“こんなゾンビだらけの言語に居られるか!俺は他の言語に出て行くぜ!” -- 行方知れずのプログラマー

🧟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)bindmem_fnnot_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) が潜んでいたりします。にぎやかですね。


  1. 名前空間std以下の識別子として予約済みというお話です。ユーザプログラムでこれらの名前を使えなくなる訳ではありません。本記事の内容とは別に、ユーザプログラムが名前空間stdに宣言・定義を追加することは禁止されています(一部特例を除く)。https://eel.is/c++draft/namespace.std 

  2. C++言語におけるGC(ガベージコレクション)サポートとは、実際に動作可能なGC機構を提供するのでなく、将来誰かがGC機構を作るときに必要となるであろう低レイヤ機構のみを規定します。最近もどこかで見たC++言語あるあるパターン。このGCサポートはC++11で導入されていました。ご存じでした? 

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8