Именованные требования C++: стираемый (начиная с C++11)
Требует, чтобы объект типа можно было уничтожить с помощью заданного Allocator.
Требования
Для следующих типов, значений и выражений:
| Тип | Определение |
|---|---|
T | тип объекта |
A | тип аллокатора |
X | тип контейнера, удовлетворяющий всем следующим условиям:
|
| Значение | Определение |
m | lvalue типа A |
p | указатель типа T* |
Если выражение std::allocator_traits<A>::destroy(m, p) корректно, T является стираемым из X.
Примечания
Все контейнеры стандартной библиотеки требуют, чтобы их типы значений удовлетворяли требованию Erasable.
| Для аллокатора по умолчанию это требование эквивалентно корректности | (до C++20) |
| Для аллокатора по умолчанию это требование эквивалентно корректности | (начиная с C++20) |
Хотя до C++23 при уничтожении элементов std::basic_string требовалось использовать настроенный destroy, все реализации использовали только механизм по умолчанию. Требование исправлено в P1072R10, чтобы оно соответствовало существующей практике.
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| DR | Применён к | Поведение согласно опубликованной версии | Корректное поведение |
|---|---|---|---|
| N3346 | C++11 | не было требования указывать, должен ли тип, объекты которого можно уничтожить с помощью аллокаторов | добавлено требование |
См. также
| CopyInsertable | |
| MoveInsertable | |
| EmplaceConstructible | |
| Destructible |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/Erasable