Spec-Zone.ru › C++

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API