std::copyable
std::copyable (복사 가능 객체 개념)
T가 이동 가능하면서 복사도 가능한(즉 복사 생성과 복사 대입을 지원하는) 객체 타입인지를 명세하는 개념(concept)이에요. C++20부터 있어요.
출처: cppreference
본문
<concepts> 헤더에 정의돼 있어요.
template< class T >
concept copyable =
std::copy_constructible<T> &&
std::movable<T> &&
std::assignable_from<T&, T&> &&
std::assignable_from<T&, const T&> &&
std::assignable_from<T&, const T>;
개념 copyable<T>는 T가 이동 가능하면서 복사도 가능한 객체 타입(즉 복사 생성과 복사 대입을 지원)임을 명세해요.
copy_constructible과 movable을 모두 요구하고, 여기에 더해 lvalue·const lvalue·const rvalue로부터의 복사 대입(assignable_from)이 가능해야 해요. 이는 객체 개념(object concepts) 계층의 상위 개념으로, std::semiregular·std::regular 같은 더 복잡한 개념들이 copyable을 기반으로 확장돼요.
즉 copyable<T>가 성립하면 T는 복사 생성, 이동 생성, 복사 대입, 이동 대입을 모두 지원하는 정상적인 값 타입이에요. 컨테이너 저장 요구사항을 검사하는 제네릭 코드에서 핵심 제약으로 쓰여요.
참고 문헌
- C++23 표준 (ISO/IEC 14882:2024): 18.6 Object concepts [concepts.object]
- C++20 표준 (ISO/IEC 14882:2020): 18.6 Object concepts [concepts.object]