Namespaces
Variants

C++ named requirements: BooleanTestable

From cppreference.net
C++ named requirements

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

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