Namespaces
Variants

std:: copy_constructible

From cppreference.net
Определено в заголовке <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 объектный тип, где объект этого типа может быть сконструирован из (возможно, const) lvalue или const 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]

Смотрите также

проверяет, имеет ли тип конструктор копирования
(шаблон класса)