std::copy_constructible
std::copy_constructible (복사 구성 가능성 개념)
T가 lvalue 참조 타입이거나, 그 타입의 객체가 (possibly const) lvalue 또는 const rvalue로부터 직접·복사 초기화 문맥 모두에서 (원본을 바꾸지 않고 복사본을 만드는) 일반적 의미로 구성 가능한 move_constructible 객체 타입인지를 명세하는 개념(concept)이에요. C++20부터 있어요.
출처: cppreference
본문
<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>;
개념 copy_constructible은 T가 lvalue 참조 타입이거나, 그 타입의 객체가 (possibly const) lvalue 또는 const rvalue로부터 직접·복사 초기화 문맥 모두에서 (원본을 바꾸지 않고 복사본을 만드는) 일반적 의미로 구성 가능한 move_constructible 객체 타입이면 만족돼요.
의미 요구사항
T가 객체 타입이면, 다음이 주어졌을 때 copy_constructible<T>가 모델링돼요.
v: (possibly const)T타입의 lvalue 또는const T타입의 rvalue.
다음이 참이어야 해요.
- 정의
T u = v;이후,u는v와 같고v는 수정되지 않는다. T(v)는v와 같고v를 수정하지 않는다.
즉 복사 생성 결과가 원본과 동등하고 원본이 그대로 유지돼야 해요. copy_constructible은 컨테이너·알고리즘에서 원소 타입을 제약할 때 핵심이 되는 객체 개념(object concept)이에요.
참고 문헌
- C++23 표준 (ISO/IEC 14882:2024): 18.4.14 Concept copy_constructible [concept.copyconstructible]
- C++20 표준 (ISO/IEC 14882:2020): 18.4.14 Concept copy_constructible [concept.copyconstructible]