Namespaces
Variants

C++ named requirements: Erasable (since C++11)

From cppreference.net
C++ named requirements

指定された型のオブジェクトが、与えられた Allocator によって破棄可能であることを指定します。

目次

要件

以下の型、値、および式が与えられた場合:

定義
T オブジェクト型
A アロケータ型
X 以下の全ての条件を満たすコンテナ型:
定義
m A の左辺値
p T* のポインタ

もし式 std:: allocator_traits < A > :: destroy ( m, p ) が well-formed である場合、 T Erasable です X から。

注記

すべての 標準ライブラリコンテナ は、その値型が Erasable を満たすことを要求します。

デフォルトアロケータを使用する場合、この要件は p - > ~T ( ) の有効性と等価です。これはアクセス可能なデストラクタを持つクラス型とすべてのスカラ型を受け入れますが、配列型、関数型、参照型、および void は拒否します。

(C++20まで)

デフォルトアロケータを使用する場合、この要件は std:: destroy_at ( p ) の有効性と等価です。これはアクセス可能なデストラクタを持つクラス型、すべてのスカラ型、およびそれらの配列を受け入れます。

(C++20以降)

C++23までは destroy std::basic_string の要素を破棄する際にカスタマイズされたものを使用することが要求されていましたが、すべての実装はデフォルトのメカニズムのみを使用していました。この要求は既存の実装に合わせて P1072R10 によって修正されました。

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR Applied to Behavior as published Correct behavior
N3346 C++11 アロケータを使用して破棄可能なオブジェクトを持つ型を
指定する要件は存在しなかった
要件を追加

関連項目

コピー挿入可能
ムーブ挿入可能
エンプレース構築可能
破棄可能