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