Namespaces
Variants

std::experimental::ranges:: Boolean

From cppreference.net
template < class B >

concept bool Boolean =
Movable < std:: decay_t < B >> &&
requires ( const std:: remove_reference_t < B > & b1,
const std:: remove_reference_t < B > & b2, const bool a ) {
{ b1 } - > ConvertibleTo < bool > && ;
{ ! b1 } - > ConvertibleTo < bool > && ;
{ b1 && a } - > Same < bool > && ;
{ b1 || a } - > Same < bool > && ;
{ b1 && b2 } - > Same < bool > && ;
{ a && b2 } - > Same < bool > && ;
{ b1 || b2 } - > Same < bool > && ;
{ a || b2 } - > Same < bool > && ;
{ b1 == b2 } - > ConvertibleTo < bool > && ;
{ b1 == a } - > ConvertibleTo < bool > && ;
{ a == b2 } - > ConvertibleTo < bool > && ;
{ b1 ! = b2 } - > ConvertibleTo < bool > && ;
{ b1 ! = a } - > ConvertibleTo < bool > && ;
{ a ! = b2 } - > ConvertibleTo < bool > && ;

} ;
(범위 TS)

개념 Boolean<B> 는 불린(Boolean) 컨텍스트에서 사용 가능한 타입에 대한 요구사항을 명시합니다. Boolean 이 충족되기 위해서는 논리 연산자들이 일반적인 동작 방식(단락 평가 포함)을 가져야 합니다. 보다 정확하게는, 주어진 조건에서

Boolean<B> 는 다음 조건에서만 만족됩니다:

  • bool ( b1 ) == ! bool ( ! b1 ) ;
  • b1 && b2 , b1 && bool ( b2 ) bool ( b1 ) && b2 는 모두 bool ( b1 ) && bool ( b2 ) 와 동일하며 동일한 단락 평가를 가집니다;
  • b1 || b2 , b1 || bool ( b2 ) bool ( b1 ) || b2 는 모두 bool ( b1 ) || bool ( b2 ) 와 동일하며 동일한 단락 평가를 가집니다;
  • bool ( b1 == b2 ) , bool ( b1 == bool ( b2 ) ) , 그리고 bool ( bool ( b1 ) == b2 ) 는 모두 ( bool ( b1 ) == bool ( b2 ) ) 와 동일합니다;
  • bool ( b1 ! = b2 ) , bool ( b1 ! = bool ( b2 ) ) , 그리고 bool ( bool ( b1 ) ! = b2 ) 는 모두 ( bool ( b1 ) ! = bool ( b2 ) ) 와 동일합니다.

동등성 보존

표현식은 동일한 입력이 주어졌을 때 동일한 출력을 결과로 내놓는다면 등식 보존(equality preserving) 합니다.

  • 표현식의 입력은 피연산자들로 구성됩니다.
  • 표현식의 출력은 결과와 표현식에 의해 수정된 모든 피연산자(있는 경우)로 구성됩니다.

동등성 보존이 요구되는 모든 표현식은 추가로 안정적(stable) 이어야 합니다: 동일한 입력 객체에 대한 이러한 표현식의 두 평가는 해당 입력 객체에 대한 명시적인 중간 수정이 없는 경우 동일한 출력을 가져야 합니다.

달리 명시되지 않는 한, requires-expression 에서 사용되는 모든 표현식은 등식 보존적이고 안정적이어야 하며, 표현식의 평가는 비상수 피연산자만 수정할 수 있습니다. 상수인 피연산자는 수정되어서는 안 됩니다.

암시적 표현 변형

어떤 상수 lvalue 피연산자에 대해 수정하지 않는 표현식을 사용하는 requires-expression 은 해당 피연산자에 대해 비상수 lvalue 또는 (가능하다면 상수) rvalue를 허용하는 해당 표현식의 추가 변형을 명시적으로 다른 의미론으로 요구하지 않는 한 암묵적으로 요구합니다. 이러한 암묵적 표현식 변형 은 선언된 표현식의 동일한 의미론적 요구사항을 충족해야 합니다. 구현이 이러한 변형들의 구문을 검증하는 범위는 명시되지 않습니다.

참고 사항

Boolean 타입의 예시로는 bool , std:: true_type , 그리고 std:: bitset < N > :: reference 이 있습니다. 포인터는 Boolean 타입이 아닙니다.

{ expression } - > Same < T > && 형태의 추론 제약은 효과적으로 decltype ( ( expression ) ) && T&& 와 정확히 동일한 타입이어야 함을 요구합니다. 이는 표현식의 타입과 값 범주 모두를 제약합니다.