Spec-Zone.ru › C++

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

Spec-Zone.ru

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