Namespaces
Variants

C++ named requirements: BooleanTestable

From cppreference.net
C++ named requirements

해당 타입과 값 범주의 표현식이 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 ) ) boolean-testable 를 모델링할 때만입니다.

(C++20부터)

BooleanTestable 타입의 예시(모든 값 범주 포함)는 다음과 같습니다: bool , std::true_type (C++11부터) , std:: bitset < N > :: reference , 그리고 int * 입니다.

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
LWG 2114
( P2167R3 )
C++98 bool 변환 가능성이 구현들의 기대를 반영하기에 너무 약함 요구 사항 강화됨

참고 항목

 (C++20)
타입이 부울 컨텍스트에서 사용될 수 있음을 명시
( 설명 전용 개념* )