C++ named requirements: BooleanTestable
Spezifiziert, dass ein Ausdruck eines solchen Typs und Wertkategorie konvertierbar zu bool ist, und dass die logischen Operatoren für den Typ oder zwei verschiedene BooleanTestable -Typen das übliche Verhalten aufweisen (einschließlich Kurzschlussauswertung ).
Inhaltsverzeichnis |
Anforderungen
Sei e ein Ausdruck eines bestimmten Typs und Wertkategorie. Der Typ und die Wertkategorie erfüllen die BooleanTestable Anforderungen, wenn:
- ! e ist wohlgeformt und modifiziert das Objekt, das durch e bezeichnet wird, nicht, falls vorhanden , außer dass, wenn e ein X-Wert ist, das bezeichnete Objekt in einem gültigen, aber nicht spezifizierten Zustand belassen werden kann (seit C++11) .
- Sowohl e als auch ! e sind durch implizite Konvertierung und static_cast in bool konvertierbar.
- Konvertierungen auf beide Arten erzeugen gleiche Ergebnisse und modifizieren das Quellobjekt nicht, falls vorhanden , außer dass, wenn e oder ! e ein X-Wert ist, das Quellobjekt in einem gültigen, aber nicht spezifizierten Zustand belassen werden kann (seit C++11) .
- bool ( ! e ) == ! bool ( e ) gilt.
- Kein sichtbarer nicht-Member- operator && und operator || ist durch argumentabhängige Suche für den Typ von e oder ! e sichtbar.
- Wenn e oder ! e von einem Klassentyp ist, definiert die Klasse kein Member- operator && oder operator || .
Hinweise
Der Standard definiert keine benannte Anforderung mit diesem Namen. Es wurde ursprünglich in einer frühen Lösung von
LWG2114
vorgeschlagen, wurde jedoch durch das ausschließlich zur Darstellung dienende Konzept
boolean-testable
in der endgültigen Lösung
P2167R3
ersetzt. Da Implementierungen im Allgemeinen erwarten, dass die bereitgestellten Typen
boolean-testable
modellieren, selbst in Pre-C++20-Modi, behandeln wir P2167R3 absichtlich als Fehlerbericht und transformieren
boolean-testable
zu legacy benannten Anforderungen.
Wenn die
&&
und
||
Operatoren mit Operanden verwendet werden, deren Typ und Wertkategorie
BooleanTestable
sind, werden integrierte Versionen ausgewählt und Kurzschlussauswertung durchgeführt.
|
Der Typ und die Wertkategorie eines Ausdrucks
e
erfüllen die
BooleanTestable
-Anforderungen genau dann, wenn
decltype
(
(
e
)
)
das Konzept
|
(seit C++20) |
Beispiele für BooleanTestable -Typen (mit beliebiger Wertkategorie) sind bool , std::true_type (seit C++11) , std:: bitset < N > :: reference und int * .
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
|
LWG 2114
( P2167R3 ) |
C++98 | Konvertierbarkeit zu bool war zu schwach, um die Erwartungen der Implementierungen widerzuspiegeln | Anforderungen verstärkt |
Siehe auch
|
(C++20)
|
gibt an, dass ein Typ in booleschen Kontexten verwendet werden kann
( Nur zur Darstellung verwendetes Konzept* ) |