Namensräume
Varianten
Aktionen

std::common_with

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

concept common_with =
    std::same_as<std::common_type_t<T, U>, std::common_type_t<U, T>> &&
    requires {
        static_cast<std::common_type_t<T, U>>(std::declval<T>());
        static_cast<std::common_type_t<T, U>>(std::declval<U>());
    } &&
    std::common_reference_with<
        std::add_lvalue_reference_t<const T>,
        std::add_lvalue_reference_t<const U>> &&
    std::common_reference_with<
        std::add_lvalue_reference_t<std::common_type_t<T, U>>,
        std::common_reference_t<
            std::add_lvalue_reference_t<const T>,

            std::add_lvalue_reference_t<const U>>>;
(seit C++20)

Das Konzept common_with<T, U> gibt an, dass zwei Typen T und U einen gemeinsamen Typ (wie von std::common_type_t berechnet) teilen, zu dem beide konvertiert werden können.

Inhalt

[bearbeiten] Semantische Anforderungen

T und U modellieren std::common_with<T, U> nur, wenn für gleichheitserhaltende Ausdrücke t1, t2, u1 und u2 gilt, dass decltype((t1)) und decltype((t2)) beide T sind und decltype((u1)) und decltype((u2)) beide U sind,

Mit anderen Worten, die Konvertierung in den gemeinsamen Typ muss die Gleichheit bewahren.

[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.6 Concept common_with [concept.common]
  • C++20 Standard (ISO/IEC 14882:2020)
  • 18.4.6 Concept common_with [concept.common]

[bearbeiten] Siehe auch

ermittelt den gemeinsamen Typ einer Gruppe von Typen
(Klassenvorlage) [bearbeiten]
ermittelt den gemeinsamen Referenztyp einer Gruppe von Typen
(Klassenvorlage) [bearbeiten]
gibt an, dass zwei Typen einen gemeinsamen Referenztyp haben
(Konzept) [bearbeiten]