Namensräume
Varianten
Aktionen

std::swappable, std::swappable_with

Von cppreference.com
< cpp‎ | concepts
 
 
 
Definiert in der Header-Datei <concepts>
template< class T >

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

    };
(1) (seit C++20)
template< class T, class U >

concept swappable_with =
    std::common_reference_with<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) (seit C++20)

Das Konzept swappable<T> spezifiziert, dass Lvalues vom Typ T austauschbar sind.

Das Konzept swappable_with<T, U> spezifiziert, dass Ausdrücke der durch T und U kodierten Typen und Wertkategorien miteinander austauschbar sind. swappable_with<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 zwei verschiedene Objekte t2 gleich t und u2 gleich u, nach der Auswertung von entweder ranges::swap(t, u) oder ranges::swap(u, t), gilt t2 ist gleich u und u2 ist gleich t.

[bearbeiten] Gleichheitserhaltung

Ausdrücke, die in requires-Ausdrücken der Standardbibliothekskonzepte deklariert sind, müssen gleichheitserhaltend sein (sofern nicht anders angegeben).

[bearbeiten] Referenzen

  • C++23 Standard (ISO/IEC 14882:2024)
  • 18.4.9 Konzept swappable [concept.swappable]
  • C++20 Standard (ISO/IEC 14882:2020)
  • 18.4.9 Konzept swappable [concept.swappable]