Namespaces
Variants

std::experimental::ranges:: ConvertibleTo

From cppreference.net
template < class From, class To >

concept bool ConvertibleTo =
std:: is_convertible < From, To > :: value &&
requires ( From ( & f ) ( ) ) {
static_cast < To > ( f ( ) ) ;

} ;
(ranges TS)

Das Konzept ConvertibleTo < From, To > spezifiziert, dass ein Ausdruck des durch From angegebenen Typs und Wertkategorie implizit und explizit in den Typ To konvertiert werden kann, und dass beide Konvertierungsformen äquivalent sind.

Genauer gesagt, ConvertibleTo < From, To > ist nur dann erfüllt, wenn für die erfundene Funktion To test ( From ( & f ) ( ) ) { return f ( ) ; } und eine Funktion f vom Typ From ( ) der Ausdruck f ( ) gleichheitserhaltend ist (siehe unten),

  • Entweder
    • To ist weder ein Objekttyp noch ein Referenz-auf-Objekt-Typ, oder
    • static_cast < To > ( f ( ) ) ist gleich test(f) , und
  • Einer der folgenden Punkte ist wahr:
    • From ist kein Referenz-auf-Objekt-Typ, oder
    • From ist eine Rvalue-Referenz auf einen nicht-konst-qualifizierten Typ, und der resultierende Zustand des Objekts, auf das verwiesen wird durch f ( ) ist gültig aber unspezifiziert nach einem der obigen Ausdrücke; oder
    • das Objekt, auf das verwiesen wird durch f() wird durch keinen der obigen Ausdrücke modifiziert.

Es muss keine Subsumptionsbeziehung zwischen ConvertibleTo < From, To > und std:: is_convertible < From, To > :: value bestehen.

Gleichheitserhaltung

Ein Ausdruck ist gleichheitserhaltend , wenn er bei gleichen Eingaben zu gleichen Ausgaben führt.

  • Die Eingaben eines Ausdrucks bestehen aus seinen Operanden.
  • Die Ausgaben eines Ausdrucks bestehen aus seinem Ergebnis und allen durch den Ausdruck modifizierten Operanden (falls vorhanden).

Jeder Ausdruck, der gleichungserhaltend sein muss, muss darüber hinaus stabil sein: Zwei Auswertungen eines solchen Ausdrucks mit denselben Eingabeobjekten müssen gleiche Ausgaben liefern, sofern keine explizite Änderung dieser Eingabeobjekte zwischen den Auswertungen erfolgt.

Sofern nicht anders angegeben, muss jeder Ausdruck, der in einem requires-expression verwendet wird, gleichheitserhaltend und stabil sein, und die Auswertung des Ausdrucks darf nur seine nicht-konstanten Operanden modifizieren. Operanden, die konstant sind, dürfen nicht modifiziert werden.

Siehe auch

prüft, ob ein Typ in den anderen Typ konvertiert werden kann
(Klassen-Template)