Requisitos denominados de C++: ComprobableBooleano
Especifica que una expresión de dicho 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 de ComprobableBooleano tienen el comportamiento habitual (incluido cortocircuito).
Requisitos
Sea e una expresión de un determinado tipo y categoría de valor. El tipo y la categoría de valor cumplen con los requisitos de ComprobableBooleano si:
!eestá bien formada y no modifica el objeto denotado pore, si lo hay, excepto que siees un x-valor, el objeto denotado puede dejarse en un estado válido pero no especificado (desde C++11).- Tanto
ecomo!eson convertibles abooltanto por conversión implícita como por static_cast. - Las conversiones en ambos sentidos producen resultados iguales y no modifican el objeto de origen, si lo hay, excepto que si
eo!ees un x-valor, el objeto de origen puede dejarse en un estado válido pero no especificado (desde C++11). bool(!e) == !bool(e)es válido.- No hay ningún
operator&&nioperator||viable que no sea miembro, visible por búsqueda dependiente de argumentos para el tipo deeo!e. - Si
eo!ees de un tipo clase, la clase no define ningún miembrooperator&&nioperator||.
Notas
El estándar no define un requisito denominado con este nombre. Originalmente se propuso en una resolución temprana de LWG2114, pero fue reemplazado por el concepto de solo exposición comprobable-booleano en la resolución final P2167R3. Debido a que las implementaciones generalmente esperan que los tipos proporcionados modelen comprobable-booleano incluso en modos anteriores a C++20, tratamos intencionalmente P2167R3 como un informe de defectos y transformamos comprobable-booleano en requisitos denominados legados.
Cuando los operadores && y || se utilizan con operandos cuyo tipo y categoría de valor son ComprobableBooleano, se seleccionan versiones integradas y se realiza una evaluación de cortocircuito.
|
El tipo y la categoría de valor de una expresión |
(desde C++20) |
Algunos ejemplos de tipos ComprobableBooleano (con cualquier categoría de valor) incluyen bool, std::true_type (desde C++11), std::bitset<N>::reference y int*.
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| P2167R3 | C++98 | La convertibilidad a bool era demasiado débil para reflejar las expectativas de las implementaciones.
|
Se reforzaron los requisitos. |
Véase también
(C++20) |
Especifica que un tipo puede usarse en contextos booleanos. (concepto solo de exposición) |