std::move_constructible
std::move_constructible (이동 구성 가능 개념)
T 타입의 객체가 rvalue의 일반적 의미로 구성 가능한지, 즉 이동 생성이 가능한지를 명세하는 개념(concept)이에요. C++20부터 있어요.
출처: cppreference
본문
<concepts> 헤더에 정의돼 있어요.
template< class T >
concept move_constructible =
std::constructible_from<T, T&&> && std::convertible_to<T&&, T>;
개념 move_constructible은 T 타입의 객체가 rvalue의 일반적 의미로 구성 가능한지, 즉 이동 생성이 가능한지를 명세해요. T가 rvalue 참조(T&&)로부터 생성 가능하고 해당 rvalue가 T로 변환 가능해야 해요.
T가 객체 타입이면 move_constructible<T>가 모델링되려면 이동 생성 결과가 원본과 동등하거나(비용이 저렴한 경우), 원본이 유효하지만 불특정 상태가 되어야 해요. 이동 생성은 복사 생성과 함께 객체 생성 개념의 핵심이에요.
이 개념은 movable, copy_constructible 등 상위 객체 개념들이 기반으로 삼는 가장 기초적인 구성 개념이에요. std::unique_ptr처럼 복사는 불가능하지만 이동은 가능한 타입을 제약할 때도 쓰여요.
참고 문헌
- C++23 표준 (ISO/IEC 14882:2024): 18.4.13 Concept move_constructible [concept.moveconstructible]
- C++20 표준 (ISO/IEC 14882:2020): 18.4.13 Concept move_constructible [concept.moveconstructible]