Namespaces
Variants

C++ named requirements: CopyInsertable (since C++11)

From cppreference.net
C++ named requirements

주어진 할당자를 사용하여 해당 타입의 객체를 제자리에서 복사 생성할 수 있음을 지정합니다.

요구사항

주어진 타입, 값 및 표현식:

유형 정의
T 객체 유형
A 할당자 유형
X 다음 모든 조건을 만족하는 컨테이너 유형:
  • X::value_type T 와 동일함.
  • X::allocator_type std:: allocator_traits < A > :: rebind_alloc < T > 와 동일함.
정의
m A 유형의 lvalue
p T* 유형의 포인터
표현식 정의
v T / const T 유형의 lvalue를 나타내는 표현식, 또는 const T 유형의 rvalue
expr std:: allocator_traits < A > :: construct ( m, p, v )

T 는 다음 조건을 모두 만족할 경우 CopyInsertable 하다고 합니다:

  • T MoveInsertable 이며 X 에 삽입 가능합니다.
  • expr 이 올바른 형식입니다.
  • expr 을 평가해도 v 의 값이 변경되지 않습니다.
  • expr 평가 직후, v 의 값은 * p 와 동등합니다.

참고 사항

만약 A std:: allocator < T > 라면, 이는 다음과 같이 placement new 를 호출합니다: :: new ( ( void * ) p ) T ( v ) (C++20 이전) std:: construct_at ( p, v ) (C++20 이후) .

C++23 이전까지 std::basic_string 의 요소를 생성할 때 사용자 정의 construct 를 사용해야 하지만, 모든 구현체는 기본 메커니즘만 사용했습니다. 이 요구사항은 기존 관행과 일치하도록 P1072R10 에 의해 수정되었습니다.

결함 보고서

다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 2177 C++11 expr 평가에 사후 조건이 없었음 추가됨
LWG 3957 C++11 v T 타입의 rvalue를 나타낼 수 있었음 제외됨