C++ named requirements: Erasable (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Указывает, что объект данного типа может быть уничтожен заданным Allocator .
Содержание |
Требования
Даны следующие типы, значения и выражения:
| Тип | Определение |
T
|
тип объекта |
A
|
тип аллокатора |
X
|
тип контейнера, удовлетворяющий всем следующим условиям:
|
| Значение | Определение |
| m |
lvalue типа
A
|
| p |
указатель типа
T*
|
Если выражение
std::
allocator_traits
<
A
>
::
destroy
(
m, p
)
корректно сформировано,
T
является
Erasable
из
X
.
Примечания
Все стандартные контейнеры библиотеки требуют, чтобы их типы значений удовлетворяли требованию Erasable .
|
С аллокатором по умолчанию это требование эквивалентно валидности p - > ~T ( ) , которая принимает классовые типы с доступными деструкторами и все скалярные типы, но отвергает массивы, функциональные типы, ссылочные типы и void . |
(до C++20) |
|
С аллокатором по умолчанию это требование эквивалентно валидности std:: destroy_at ( p ) , которая принимает классовые типы с доступными деструкторами и все скалярные типы, а также их массивы. |
(начиная с C++20) |
Хотя до C++23 требовалось использовать пользовательский
destroy
при уничтожении элементов
std::basic_string
, все реализации использовали только механизм по умолчанию. Требование было исправлено
P1072R10
для соответствия существующей практике.
Отчеты о дефектах
Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| N3346 | C++11 |
не было требования указывать, может ли тип
объектов быть уничтожен с использованием аллокаторов |
добавлено требование |
Смотрите также
| CopyInsertable | |
| MoveInsertable | |
| EmplaceConstructible | |
| Destructible |