Spec-Zone.ru › C++

std::copy_constructible

Определён в заголовочном файле <concepts>
template< class T >
concept copy_constructible =
    std::move_constructible<T> &&
    std::constructible_from<T, T&> && std::convertible_to<T&, T> &&
    std::constructible_from<T, const T&> && std::convertible_to<const T&, T> &&
    std::constructible_from<T, const T> && std::convertible_to<const T, T>;
(начиная с C++20)

Концепция copy_constructible выполняется, если T является типом ссылки на lvalue либо объектным типом move_constructible, для которого объект этого типа может быть сконструирован из (возможно, константного) lvalue или константного rvalue этого типа как в контексте прямой, так и копирующей инициализации с обычной семантикой (копия создаётся без изменения исходного объекта).

Семантические требования

Если T является объектным типом, то copy_constructible<T> моделируется только в том случае, если для заданного

  • v, lvalue типа (возможно, const) T или rvalue типа const T,

выполняются следующие условия:

  • После определения T u = v;, u равно v, а v не изменяется;
  • T(v) равно v и не изменяет v.

Ссылки

  • Стандарт C++23 (ISO/IEC 14882:2024):
    • 18.4.14 Концепция copy_constructible [concept.copyconstructible]
  • Стандарт C++20 (ISO/IEC 14882:2020):
    • 18.4.14 Концепция copy_constructible [concept.copyconstructible]

См. также

is_copy_constructibleis_trivially_copy_constructibleis_nothrow_copy_constructible
(C++11)(C++11)(C++11)
проверяет, имеет ли тип конструктор копирования
(шаблон класса)
is_copy_constructible_typeis_trivially_copy_constructible_typeis_nothrow_copy_constructible_type
(C++26)(C++26)(C++26)
проверяет, имеет ли отражённый тип конструктор копирования
(функция)

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

Spec-Zone.ru

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