C++ named requirements: CopyInsertable (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
주어진 할당자를 사용하여 해당 타입의 객체를 제자리에서 복사 생성할 수 있음을 지정합니다.
요구사항
주어진 타입, 값 및 표현식:
| 유형 | 정의 |
T
|
객체 유형 |
A
|
할당자 유형 |
X
|
다음 모든 조건을 만족하는 컨테이너 유형:
|
| 값 | 정의 |
| 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를 나타낼 수 있었음
|
제외됨 |