Namespaces
Variants

C++ named requirements: BooleanTestable

From cppreference.net
C++ named requirements

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 boolean-testable .

(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* )