C++ named requirements: BooleanTestable
해당 타입과 값 범주의 표현식이 bool 으로 변환 가능하며, 해당 타입 또는 두 개의 서로 다른 BooleanTestable 타입에 대한 논리 연산자가 일반적인 동작 방식( 단락 평가 포함)을 따르도록 지정합니다.
목차 |
요구사항
특정 타입과 값 범주의 표현식 e 가 있다고 가정합니다. 타입과 값 범주가 다음 조건을 충족할 경우 BooleanTestable 요구사항을 만족합니다:
- ! e 이 올바른 형식이며, e 가 나타내는 객체(존재하는 경우)를 수정하지 않음 , 단 e 가 xvalue인 경우, 해당 객체는 유효하지만 지정되지 않은 상태로 남을 수 있음 (C++11부터) .
- e 와 ! e 모두 암시적 변환 과 static_cast 를 통해 bool 로 변환 가능함.
- 두 가지 방식의 변환은 동일한 결과를 생성하며 소스 객체(존재하는 경우)를 수정하지 않음 , 단 e 또는 ! e 가 xvalue인 경우, 소스 객체는 유효하지만 지정되지 않은 상태로 남을 수 있음 (C++11부터) .
- bool ( ! e ) == ! bool ( e ) 이 성립함.
- e 또는 ! e 의 타입에 대해 인수 종속적 탐색 으로 보이는 유효한 비멤버 operator && 및 operator || 이 존재하지 않음.
- e 또는 ! e 이 클래스 타입인 경우, 해당 클래스는 멤버 operator && 또는 operator || 을 정의하지 않음.
참고 사항
표준은 이 이름의 명명된 요구 사항을 정의하지 않습니다. 이것은 원래
LWG2114
의 초기 해결안에서 제안되었으나, 최종 해결안
P2167R3
에서 설명 전용 개념인
boolean-testable
으로 대체되었습니다. 구현체들은 일반적으로 C++20 이전 모드에서도 제공된 타입들이
boolean-testable
를 모델링할 것으로 기대하기 때문에, 우리는 의도적으로 P2167R3을 결함 보고서로 간주하고
boolean-testable
를 레거시 명명된 요구 사항으로 변환합니다.
&&
및
||
연산자가 피연산자의 타입과 값 카테고리가
BooleanTestable
인 경우, 내장 버전이 선택되고 단락 평가가 수행됩니다.
|
표현식
e
의 타입과 값 범주가
BooleanTestable
요구 사항을 충족하는 경우는 오직
decltype
(
(
e
)
)
가
|
(C++20부터) |
BooleanTestable 타입의 예시(모든 값 범주 포함)는 다음과 같습니다: bool , std::true_type (C++11부터) , std:: bitset < N > :: reference , 그리고 int * 입니다.
결함 보고서
다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
|
LWG 2114
( P2167R3 ) |
C++98 | bool 변환 가능성이 구현들의 기대를 반영하기에 너무 약함 | 요구 사항 강화됨 |
참고 항목
|
(C++20)
|
타입이 부울 컨텍스트에서 사용될 수 있음을 명시
( 설명 전용 개념* ) |