Spec-Zone.ru › C++

Именованные требования C++: DefaultInsertable (начиная с C++11)

Указывает, что объект типа может быть сконструирован по умолчанию на месте заданным аллокатором.

Требования

Для следующих типов, значений и выражений:

Тип Определение
T тип объекта
A тип аллокатора
X тип контейнера, удовлетворяющий всем следующим условиям:
  • X::value_type совпадает с T.
  • X::allocator_type совпадает с std::allocator_traits<A>::rebind_alloc<T>.
Значение Определение
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

Spec-Zone.ru

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