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

< cpp‎ | named req
 
 
 

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

要求

以下情况下,类型 T 从{{named req|Container} X(其 value_type 等同于 T可擦除 (Erasable) :给定

A 分配器类型
m A 类型的左值
p 容器所准备的 T* 类型的指针

其中 X::allocator_type 等同于 std::allocator_traits<A>::rebind_alloc<T>

下列表达式良构:

std::allocator_traits<A>::destroy(m, p);

X 不具分配器,则如同 A 就是 std::allocator<T> 一样进行定义,但并不需要创建分配器对象,且不会实例化用户定义的 std::allocator 的特化。

注解

所有标准库容器均要求其元素满足可擦除 (Erasable)

对于默认分配器,此要求等价于 p->~T() 的合法性,它接受拥有可访问的析构函数的类类型和所有标量类型,但拒绝数组类型、函数类型、引用类型和 void。

(C++20 前)

对于默认分配器,此要求等价于 std::destroy_at(p) 的合法性,它接受拥有可访问的析构函数的类类型和所有标量类型,还有其数组。

(C++20 起)

参阅

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