C++ named requirements: BooleanTestable
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
|
(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* ) |