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_reference
rebind
型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の以下の階層の下に解説ページを用意する予定です。