C++ 具名要求:可擦除 (Erasable) (C++11 起)

来自cppreference.com
< cpp‎ | named req


 
 
C++ 具名要求
 

指定该类型的对象能以给定的分配器 (Allocator) 销毁。

要求

给定以下类型、值和表达式:

类型定义
T对象类型
A分配器类型
X满足以下所有条件的容器类型:
定义
mA 类型左值
pT* 类型指针

如果表达式 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++ 标准。

缺陷报告应用于出版时的行为正确行为
N3346C++11没有指定某类型的对象是否可以通过分配器进行销毁的要求添加该要求

参阅

可复制插入 (CopyInsertable)
可移动插入 (MoveInsertable)
可就位构造 (EmplaceConstructible)
可析构 (Destructible)