Namensräume
Varianten
Aktionen

C++ benannte Anforderungen: BooleanTestable

Von cppreference.com
 
 
C++ benannte Anforderungen
 

Gibt an, dass ein Ausdruck eines solchen Typs und einer solchen Wertkategorie in bool konvertierbar ist und für den die logischen Operatoren für den Typ oder zwei verschiedene BooleanTestable-Typen das übliche Verhalten aufweisen (einschließlich Kurzschlussauswertung).

Inhalt

[bearbeiten] Anforderungen

Sei e ein Ausdruck eines bestimmten Typs und einer bestimmten Wertkategorie. Der Typ und die Wertkategorie erfüllen die BooleanTestable-Anforderungen, wenn

  • !e wohlgeformt ist und das durch e bezeichnete Objekt, falls vorhanden, nicht verändert, es sei denn, wenn e ein xvalue ist, kann das bezeichnete Objekt in einem gültigen, aber unbestimmten Zustand verbleiben(seit C++11).
  • Sowohl e als auch !e sind sowohl durch implizite Konvertierung als auch durch static_cast in bool konvertierbar.
  • Konvertierungen in beiden Richtungen liefern gleiche Ergebnisse und verändern das Quellobjekt, falls vorhanden, nicht , es sei denn, wenn e oder !e ein xvalue ist, kann das Quellobjekt in einem gültigen, aber unbestimmten Zustand verbleiben(seit C++11).
  • bool(!e) == !bool(e) gilt.
  • Kein valider 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 keine Member operator&& oder operator||.

[bearbeiten] Anmerkungen

Der Standard definiert keine benannte Anforderung mit diesem Namen. Sie wurde ursprünglich in einer frühen Auflösung von LWG2114 vorgeschlagen, wurde aber in der endgültigen Auflösung P2167R3 durch das reine Expositionskonzept boolean-testable ersetzt. Da Implementierungen im Allgemeinen erwarten, dass die bereitgestellten Typen boolean-testable auch in Modi vor C++20 modellieren, behandeln wir P2167R3 absichtlich als Fehlerbericht und transformieren boolean-testable in übernommene benannte Anforderungen.

Wenn die Operatoren && und || mit Operanden verwendet werden, deren Typ und Wertkategorie BooleanTestable sind, werden integrierte Versionen ausgewählt und eine Kurzschlussauswertung durchgeführt.

Der Typ und die Wertkategorie eines Ausdrucks e erfüllen die BooleanTestable-Anforderungen genau dann, wenn decltype((e)) 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*.

[bearbeiten] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 2114
(P2167R3)
C++98 Konvertierbarkeit in bool war zu schwach, um die Erwartungen der Implementierungen widerzuspiegeln Anforderungen verstärkt

[bearbeiten] Siehe auch

 (C++20)
gibt an, dass ein Typ in booleschen Kontexten verwendet werden kann
(Konzept nur für die Exposition*)[bearbeiten]