Namespaces
Variants

std:: move_constructible

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

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

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

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

  • rv , rvalue типа T , и
  • u2 , отдельный объект типа T , равный rv ,

следующие утверждения верны:

  • После определения T u = rv ; , u равен u2 ;
  • T(rv) равен u2 ; и
  • Если T не квалифицирован как const, то результирующее состояние rv (после вычисления определения/выражения в любом из вышеуказанных пунктов) является валидным, но неопределённым; в противном случае оно остаётся неизменным.

Ссылки

  • Стандарт C++23 (ISO/IEC 14882:2024):
  • 18.4.13 Концепт move_constructible [concept.moveconstructible]
  • Стандарт C++20 (ISO/IEC 14882:2020):
  • 18.4.13 Концепт move_constructible [concept.moveconstructible]

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

проверяет, может ли тип быть сконструирован из rvalue-ссылки
(шаблон класса)