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