Namensräume
Varianten
Aktionen

std::experimental::ranges::Swappable, std::experimental::ranges::SwappableWith

Von cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
Konzeptbibliothek
Kernsprachen-Konzepte
                              
SwappableSwappableWith
Objektkonzepte
                              
                              
Vergleichskonzepte
Aufrufbare Konzepte
                                        
                              
URNG-Konzept
 
Definiert in Header <experimental/ranges/concepts>
template< class T >

concept bool Swappable =
    requires(T& a, T& b) {
        ranges::swap(a, b);

    };
(1) (Ranges TS)
template< class T, class U >

concept bool SwappableWith =
    CommonReference<
        const std::remove_reference_t<T>&,
        const std::remove_reference_t<U>&> &&
    requires(T&& t, U&& u) {
        ranges::swap(std::forward<T>(t), std::forward<T>(t));
        ranges::swap(std::forward<U>(u), std::forward<U>(u));
        ranges::swap(std::forward<T>(t), std::forward<U>(u));
        ranges::swap(std::forward<U>(u), std::forward<T>(t));

    };
(2) (Ranges TS)

Das Konzept Swappable<T> gibt an, dass lvalues vom Typ T vertauschbar sind.

Das Konzept SwappableWith<T, U> gibt an, dass Ausdrücke der von T und U kodierten Typen und Wertkategorien miteinander vertauschbar sind. SwappableWith<T, U> ist nur dann erfüllt, wenn ein Aufruf von ranges::swap(t, u) den Wert von t und u vertauscht, d.h., gegeben getrennte Objekte t2 gleich t und u2 gleich u, nach der Auswertung von entweder ranges::swap(t, u) oder ranges::swap(u, t), t2 gleich u und u2 gleich t ist.

[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.