std::experimental::ranges::Common
| Definiert in Header <experimental/ranges/concepts> |
||
| template< class T, class U > concept bool Common = |
(Ranges TS) | |
Das Konzept Common<T, U> gibt an, dass zwei Typen T und U einen gemeinsamen Typ (wie von ranges::common_type_t berechnet) haben, in den beide konvertiert werden können.
Common<T, U> ist nur dann erfüllt, wenn für Ausdrücke t und u, so dass decltype((t)) T und decltype((u)) U ist,
- ranges::common_type_t<T, U>(t) gleich ranges::common_type_t<T, U>(t) ist, wenn und nur wenn
tein gleichheitserhaltender Ausdruck ist; und - ranges::common_type_t<T, U>(u) gleich ranges::common_type_t<T, U>(u) ist, wenn und nur wenn
uein gleichheitserhaltender Ausdruck ist.
Anders ausgedrückt muss die Konvertierung in den gemeinsamen Typ die Eigenschaft der Gleichheitserhaltung des ursprünglichen Ausdrucks nicht verändern.
[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.
[bearbeiten] Siehe auch
| ermittelt den gemeinsamen Typ einer Menge von Typen (class template) | |
| ermittelt den gemeinsamen Referenztyp einer Menge von Typen (class template) | |
| gibt an, dass zwei Typen einen gemeinsamen Referenztyp haben (concept) |