std::movable
std::movable (이동 가능 객체 개념)
T가 이동될 수 있는(즉 이동 생성, 이동 대입이 가능하고 T 타입의 lvalue를 서로 swap할 수 있는) 객체 타입인지를 명세하는 개념(concept)이에요. C++20부터 있어요.
출처: cppreference
본문
<concepts> 헤더에 정의돼 있어요.
template< class T >
concept movable =
std::is_object_v<T> &&
std::move_constructible<T> &&
std::assignable_from<T&, T> &&
std::swappable<T>;
개념 movable<T>는 T가 이동될 수 있는 객체 타입임을 명세해요. 즉 이동 생성, 이동 대입이 가능하고 T 타입의 lvalue를 서로 swap할 수 있어야 해요.
구체적으로 T가 객체 타입이고(is_object), 이동 구성 가능하며(move_constructible), rvalue로부터 대입 가능하고(assignable_from<T&, T>), swap 가능해야(swappable<T>) 해요.
movable은 객체 개념(object concepts) 계층에서 copyable보다 한 단계 아래에 위치해요. copyable은 movable을 포함하면서 복사까지 요구하므로, 이동만 가능한 타입(예: std::unique_ptr)은 movable은 만족하지만 copyable은 아니에요. 이동 전용 자원 소유 타입을 제약하는 제네릭 코드에서 핵심으로 쓰여요.
참고 문헌
- C++23 표준 (ISO/IEC 14882:2024): 18.6 Object concepts [concepts.object]
- C++20 표준 (ISO/IEC 14882:2020): 18.6 Object concepts [concepts.object]