C++1zから、標準ライブラリのいくつかの機能が非推奨となります。非推奨となった機能は将来のバージョンで削除される可能性がありますのでご注意ください。
std::iteratorクラス
自作イテレータを作るときに基本クラスとして使用するstd::iteratorクラスですが、これを使ってもイテレータを定義するのはあまり簡単になりませんでした。
このクラスを使用することによって問題がより複雑になってしまうケースもありましたので、非推奨となります。
Boost.Iteratorのようなイテレータを簡単に定義するための新たな仕組みは提供されませんので、標準ライブラリの範囲では、イテレータは最初から最後まで自分で定義することになります。
std::allocatorクラスのいくつかのメンバと、std::allocator<void>
C++11からアロケータの中間インタフェースとデフォルト実装を提供するstd::allocator_traitsクラスが導入されました。それにともない、std::allocatorの多くの機能はいらなくなりました。
そのため、std::allocatorクラスの以下のメンバは、非推奨となります:
size_type型difference_type型pointer型const_pointer型reference型const_referencerebind型address()メンバ関数allocate()メンバ関数のhintパラメータmax_size()メンバ関数construct()メンバ関数destroy()メンバ関数
また、rebind操作のために必要だったstd::allocator<void>も、std::allocator_traitsの機能でまかなえるようになったので、この特殊化も非推奨となります。
std::is_literal_type型特性
constexprで使用できる型が、C++のバージョンアップにつれて増えていっています。そのうち何でも(もしくはほとんどの型を)扱えるようにする予定のため、この型特性は非推奨となります。
この型特性がほんとうに必要にならなくなるくらいに何でもconstexprで扱えるようになったときに、この機能は削除されます。
temporary buffer関係
std::get_temporary_buffer()関数とstd::return_temporary_buffer()関数は、関数内での一時的なメモリ確保のために、最適化されたメモリ確保の仕組みを提供することを期待して定義されましたが、実際には誰も特別視せず、誰も使いませんでした。
将来的にスタックからメモリ確保をするdynarrayといった仕組みが検討されていますが、temporary buffer関係の現在のAPIは設計として例外安全性やRAIIといったものが考慮されていないため、dynarrayが入ったとしてもtemporary buffer APIの内部を改善することはできないと判断され、非推奨となります。
std::raw_storage_iteratorクラス
未初期化メモリを指すイテレータから、オブジェクトを構築していく出力イテレータのstd::raw_storage_iteratorクラスですが、オブジェクトを構築していくのであれば、アロケータとの連携ができることが重要となります。
std::raw_storage_iteratorはそのような用途には適さないということで、非推奨となります。
参照
お断り
この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。