C++ named requirements: BooleanTestable
Spécifie qu'une expression d'un tel type et d'une telle catégorie de valeur est convertible en bool , et pour laquelle les opérateurs logiques pour le type ou deux types BooleanTestable différents ont le comportement habituel (incluant l'évaluation en court-circuit ).
Table des matières |
Exigences
Soit e une expression d'un certain type et d'une certaine catégorie de valeur. Le type et la catégorie de valeur satisfont aux exigences BooleanTestable si :
- ! e est bien formé et ne modifie pas l'objet désigné par e , le cas échéant , sauf que si e est une xvalue, l'objet désigné peut être laissé dans un état valide mais non spécifié (depuis C++11) .
- À la fois e et ! e sont convertibles en bool par conversion implicite et static_cast .
- Les conversions des deux manières produisent des résultats égaux et ne modifient pas l'objet source, le cas échéant , sauf que si e ou ! e est une xvalue, l'objet source peut être laissé dans un état valide mais non spécifié (depuis C++11) .
- bool ( ! e ) == ! bool ( e ) est vérifié.
- Aucun opérateur non-membre viable operator && et operator || n'est visible par recherche dépendante des arguments pour le type de e ou ! e .
- Si e ou ! e est d'un type classe, la classe ne définit aucun membre operator && ou operator || .
Notes
La norme ne définit pas d'exigence nommée avec ce nom. Elle a été initialement proposée dans une résolution précoce de
LWG2114
, mais a été remplacée par le concept exposition-only
boolean-testable
dans la résolution finale
P2167R3
. Comme les implémentations s'attendent généralement à ce que les types fournis modélisent
boolean-testable
même dans les modes pré-C++20, nous traitons intentionnellement P2167R3 comme un rapport de défaut et transformons
boolean-testable
en exigence nommée héritée.
Lorsque les opérateurs
&&
et
||
sont utilisés avec des opérandes dont le type et la catégorie de valeur sont
BooleanTestable
, les versions intégrées sont sélectionnées et l'évaluation en court-circuit est effectuée.
|
Le type et la catégorie de valeur d'une expression
e
satisfont aux exigences
BooleanTestable
si et seulement si
decltype
(
(
e
)
)
modélise
|
(depuis C++20) |
Exemples de types BooleanTestable (avec toute catégorie de valeur) incluent bool , std::true_type (depuis C++11) , std:: bitset < N > :: reference , et int * .
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
|
LWG 2114
( P2167R3 ) |
C++98 | la convertibilité vers bool était trop faible pour refléter les attentes des implémentations | exigences renforcées |
Voir aussi
|
(C++20)
|
spécifie qu'un type peut être utilisé dans des contextes booléens
( concept d'exposition uniquement* ) |