Spec-Zone.ru › C++

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

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

Требования

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

Тип Определение
T тип объекта
A тип распределителя
X тип контейнера, удовлетворяющий всем следующим условиям:
  • X::value_type совпадает с T.
  • X::allocator_type совпадает с std::allocator_traits<A>::rebind_alloc<T>.
Значение Определение
m lvalue типа A
p указатель типа T*
Выражение Определение
v выражение, обозначающее lvalue типа T / constT или rvalue типа constT
expr std::allocator_traits<A>::construct(m, p, v)

T удовлетворяет требованию CopyInsertable в X, если выполнены все следующие условия:

  • T удовлетворяет требованию MoveInsertable в X.
  • expr корректно сформировано.
  • Вычисление expr не изменяет значение v.
  • Сразу после вычисления expr значение v эквивалентно *p.

Примечания

Если A — это std::allocator<T>, то будет вызван placement new, как в ::new((void*)p) T(v).(до C++20)std::construct_at(p, v)(начиная с C++20).

Хотя до C++23 требовалось использовать пользовательский construct при конструировании элементов std::basic_string, все реализации использовали только механизм по умолчанию. Требование исправлено предложением P1072R10 с целью привести его в соответствие с существующей практикой.

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.

Отчёт об ошибке Применён к Поведение в опубликованной версии Исправленное поведение
LWG 2177 C++11 вычисление expr не имело никаких постусловий добавлено
LWG 3957 C++11 v могло обозначать rvalue типа T исключено

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/CopyInsertable

Spec-Zone.ru

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