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 ) 格式正确,则 T 可从 X 擦除

注释

所有 标准库容器 都要求其值类型满足 Erasable 要求。

使用默认分配器时,该要求等价于 p - > ~T ( ) 的有效性,该表达式接受具有可访问析构函数的类类型和所有标量类型,但拒绝数组类型、函数类型、引用类型以及 void

(C++20 前)

使用默认分配器时,该要求等价于 std:: destroy_at ( p ) 的有效性,该表达式接受具有可访问析构函数的类类型、所有标量类型及其数组类型。

(C++20 起)

尽管在 C++23 之前要求销毁 std::basic_string 元素时必须使用自定义的 destroy 操作,但所有实现都仅使用了默认机制。该要求已通过 P1072R10 修正以符合现有实践。

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

DR 适用范围 发布时的行为 正确行为
N3346 C++11 未要求说明其对象可通过分配器销毁的类型 增加了该要求

参见

可复制插入
可移动插入
可原位构造
可析构