Namespaces
Variants

C++ named requirements: BooleanTestable

From cppreference.net
C++ named requirements

Especifica que una expresión de tal tipo y categoría de valor es convertible a bool , y para la cual los operadores lógicos para el tipo o dos tipos diferentes BooleanTestable tienen el comportamiento habitual (incluyendo short-circuiting ).

Contenidos

Requisitos

Sea e una expresión de cierto tipo y categoría de valor. El tipo y categoría de valor cumplen con los requisitos BooleanTestable si:

  • ! e está bien formado y no modifica el objeto denotado por e , si existe , excepto que si e es un xvalue, el objeto denotado puede quedar en un estado válido pero no especificado (desde C++11) .
  • Tanto e como ! e son convertibles a bool mediante conversión implícita y static_cast .
  • Las conversiones en ambos modos producen resultados iguales y no modifican el objeto fuente, si existe , excepto que si e o ! e es un xvalue, el objeto fuente puede quedar en un estado válido pero no especificado (desde C++11) .
  • bool ( ! e ) == ! bool ( e ) se cumple.
  • No hay ningún operator && y operator || no-miembro viable visible mediante búsqueda dependiente de argumento para el tipo de e o ! e .
  • Si e o ! e es de tipo clase, la clase no define ningún miembro operator && o operator || .

Notas

El estándar no define un requisito nombrado con este nombre. Originalmente fue propuesto en una resolución temprana de LWG2114 , pero fue reemplazado por el concepto solo de exposición boolean-testable en la resolución final P2167R3 . Debido a que las implementaciones generalmente esperan que los tipos proporcionados modelen boolean-testable incluso en modos anteriores a C++20, intencionalmente tratamos P2167R3 como un reporte de defectos y transformamos el boolean-testable a requisitos nombrados legacy.

Cuando los operadores && y || se utilizan con operandos cuyo tipo y categoría de valor son BooleanTestable , se seleccionan las versiones incorporadas y se realiza la evaluación de cortocircuito.

El tipo y la categoría de valor de una expresión e cumplen con los requisitos de BooleanTestable si y solo si decltype ( ( e ) ) modela boolean-testable .

(since C++20)

Ejemplos de tipos BooleanTestable (con cualquier categoría de valor) incluyen bool , std::true_type (desde C++11) , std:: bitset < N > :: reference , e int * .

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2114
( P2167R3 )
C++98 la convertibilidad a bool era demasiado débil para reflejar las expectativas de las implementaciones requisitos fortalecidos

Véase también

 (C++20)
especifica que un tipo puede ser utilizado en contextos booleanos
( concepto solo para exposición* )