名前空間
変種
操作

C++ 名前付き要件: Erasable (C++11 以降)

From cppreference.com
 
 
C++ 名前付き要件
 

特定のアロケータによって、その型のオブジェクトが破棄できることを指定します。

目次

[編集] 要件

以下の型、値、式が与えられた場合

定義
T オブジェクト型
A アロケータ型
X 以下のすべての条件を満たすコンテナ型
  • X::value_typeT と同じである。
  • X::allocator_typestd::allocator_traits<A>::rebind_alloc<T> と同じである。
定義
m A の左辺値
p T* のポインタ

std::allocator_traits<A>::destroy(m, p) が整形式である場合、TX から Erasable である。

[編集] 備考

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

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

(C++20まで)

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

(C++20以降)

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

[編集] 欠陥報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
N3346 C++11 型がアロケータを使用して破棄できるかどうかを指定する要件がなかった。
アロケータを使用してオブジェクトを破棄できる
要件が追加された

[編集] 関連項目

CopyInsertable
MoveInsertable
EmplaceConstructible
Destructible
English 日本語 中文(简体) 中文(繁體)