std::experimental::ranges:: ConvertibleTo
|
Definiert im Header
<experimental/ranges/concepts>
|
||
|
template
<
class
From,
class
To
>
concept
bool
ConvertibleTo
=
|
(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
-
Toist 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:
-
Fromist kein Referenz-auf-Objekt-Typ, oder -
Fromist 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
|
(C++11)
(C++20)
|
prüft, ob ein Typ in den anderen Typ konvertiert werden kann
(Klassen-Template) |