|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Specifies that an object of the type can be destroyed by a givenAllocator.
Contents |
Given the following types, values and expressions:
| Type | Definition |
T | an object type |
A | an allocator type |
X | a container type satisfying all following conditions:
|
| Value | Definition |
| m | an lvalue of typeA |
| p | a pointer of typeT* |
If the expressionstd::allocator_traits<A>::destroy(m, p) is well-formed,T isErasable fromX.
Allstandard library containers require that their value types satisfyErasable.
With the default allocator, this requirement is equivalent to the validity ofp->~T(), which accepts class types with accessible destructors and all scalar types, but rejects array types, function types, reference types, andvoid. | (until C++20) |
With the default allocator, this requirement is equivalent to the validity ofstd::destroy_at(p), which accepts class types with accessible destructors and all scalar types, as well as arrays thereof. | (since C++20) |
Although it is required that customizeddestroy is used when destroying elements ofstd::basic_string until C++23, all implementations only used the default mechanism. The requirement is corrected byP1072R10 to match existing practice.
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| N3346 | C++11 | there was no requirement to specify whether a type whose objects can be destroyed using allocators | added the requirement |
| CopyInsertable | |
| MoveInsertable | |
| EmplaceConstructible | |
| Destructible |