C++ named requirements: Erasable (since C++11)
Specifies that an object of the type can be destroyed by a given Allocator.
# Notes
All standard library containers require that their value types satisfy Erasable.
With the default allocator, this requirement is equivalent to the validity of p->~T(), which accepts class types with accessible destructors and all scalar types, but rejects array types, function types, reference types, and void.
With the default allocator, this requirement is equivalent to the validity of std::destroy_at(p), which accepts class types with accessible destructors and all scalar types, as well as arrays thereof.
Although it is required that customized destroy is used when destroying elements of std::basic_string until C++23, all implementations only used the default mechanism. The requirement is corrected by P1072R10 to match existing practice.
# Defect reports
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| N3346 | C++11 | there was no requirement to specify whether a typewhose objects can be destroyed using allocators | added the requirement |