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

DRApplied toBehavior as publishedCorrect behavior
N3346C++11there was no requirement to specify whether a typewhose objects can be destroyed using allocatorsadded the requirement

# See also