Namespaces
Variants

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

From cppreference.net
C++ named requirements

해당 타입의 객체가 주어진 Allocator 에 의해 파괴될 수 있음을 지정합니다.

목차

요구사항

주어진 유형, 값 및 표현식:

유형 정의
T 객체 유형
A 할당자 유형
X 다음 모든 조건을 만족하는 컨테이너 유형:
  • X::value_type T 와 동일함.
  • X::allocator_type std:: allocator_traits < A > :: rebind_alloc < T > 와 동일함.
정의
m A 유형의 lvalue
p T* 유형의 포인터

만약 표현식 std:: allocator_traits < A > :: destroy ( m, p ) 가 올바른 형식이라면, T Erasable 입니다 X 에서.

참고 사항

모든 표준 라이브러리 컨테이너 는 해당 값 타입이 Erasable 을 만족할 것을 요구합니다.

기본 할당자를 사용할 때, 이 요구 사항은 p - > ~T ( ) 의 유효성과 동등합니다. 이는 접근 가능한 소멸자를 가진 클래스 타입과 모든 스칼라 타입을 허용하지만, 배열 타입, 함수 타입, 참조 타입 및 void 는 거부합니다.

(C++20 이전)

기본 할당자를 사용할 때, 이 요구 사항은 std:: destroy_at ( p ) 의 유효성과 동등합니다. 이는 접근 가능한 소멸자를 가진 클래스 타입과 모든 스칼라 타입, 그리고 이들의 배열을 허용합니다.

(C++20 이후)

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

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
N3346 C++11 할당자를 사용하여 소멸될 수 있는 객체의 타입을
명시해야 할 요구사항이 없었음
요구사항 추가됨

참고 항목

CopyInsertable
MoveInsertable
EmplaceConstructible
Destructible