命名空间
变体
操作

C++ 命名需求: Erasable (自 C++11 起)

来自 cppreference.com
 
 
C++ 命名需求
 

指定类型对象可以由给定的 Allocator 销毁。

[编辑] 需求

类型 T 是来自 Container XErasable,其 value_typeT 相同,如果在给定

一个 分配器类型
m A 类型的左值
p T* 类型的指针,由容器准备

其中 X::allocator_typestd::allocator_traits<A>::rebind_alloc<T> 相同,

以下表达式是良构的

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

如果 X 不是分配器感知的,或者是一个 std::basic_string 特化,则该术语的定义与 Astd::allocator<T> 相同,除了不需要创建任何分配器对象,并且不会实例化 std::allocator 的用户定义特化。

[编辑] 注释

所有 标准库容器 都要求它们的元素类型满足 Erasable

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

(直到 C++20)

对于默认分配器,此需求等效于 std::destroy_at(p) 的有效性,它接受具有可访问析构函数的类类型和所有标量类型,以及它们的数组。

(自 C++20 起)

虽然在 C++23 之前,当销毁 std::basic_string 的元素时,需要使用自定义的 destroy,但所有实现都只使用了默认机制。该需求由 P1072R10 修正以匹配现有实践。

[编辑] 另请参阅

CopyInsertable
MoveInsertable
EmplaceConstructible
Destructible