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