Namensräume
Varianten
Aktionen

std::experimental::ranges::ConvertibleTo

Von cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
Konzeptbibliothek
Kernsprachen-Konzepte
ConvertibleTo
                              
Objektkonzepte
                              
                              
Vergleichskonzepte
Aufrufbare Konzepte
                                        
                              
URNG-Konzept
 
Definiert in Header <experimental/ranges/concepts>
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 mit dem durch From angegebenen Typ und Wertkategorie implizit und explizit in den Typ To konvertiert werden kann und die beiden Konvertierungsformen äquivalent sind.

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

  • Entweder
    • To ist weder ein Objekttyp noch ein Referenz-zu-Objekt-Typ, oder
    • static_cast<To>(f()) ist gleich test(f), und
  • Eine der folgenden Bedingungen ist erfüllt:
    • From ist kein Referenz-zu-Objekt-Typ, oder
    • From ist eine rvalue-Referenz auf einen nicht-const-qualifizierten Typ, und der resultierende Zustand des Objekts, auf das durch f() verwiesen wird, ist nach einem der obigen Ausdrücke gültig, aber undefiniert; oder
    • Das Objekt, auf das durch f() verwiesen wird, wird durch keinen der obigen Ausdrücke modifiziert.

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

[bearbeiten] Gleichheitserhaltung

Ein Ausdruck ist gleichheitserhaltend, wenn er bei gleichen Eingaben gleiche Ausgaben liefert.

  • Die Eingaben für einen Ausdruck bestehen aus seinen Operanden.
  • Die Ausgaben eines Ausdrucks bestehen aus seinem Ergebnis und allen von dem Ausdruck modifizierten Operanden (falls vorhanden).

Jeder Ausdruck, der gleichheitserhaltend sein muss, muss außerdem stabil sein: Zwei Auswertungen eines solchen Ausdrucks mit denselben Eingabeobjekten müssen gleiche Ausgaben liefern, solange keine explizite zwischenzeitliche Modifikation dieser Eingabeobjekte erfolgt.

Sofern nicht anders angegeben, muss jeder in einem requires-expression verwendete Ausdruck 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.

[bearbeiten] Siehe auch

prüft, ob ein Typ in den anderen Typ konvertierbar ist
(Klassenvorlage) [bearbeiten]