Namensräume
Varianten
Aktionen

std::basic_common_reference<std::reference_wrapper>

Von cppreference.com
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
Funktionsobjekte
Funktionsaufruf
(C++17)(C++23)
Identitätsfunktions-Objekt
(C++20)
Transparente Operator-Wrapper
(C++14)
(C++14)
(C++14)
(C++14)  
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)

Alte Binder und Adaptoren
(bis C++17*)
(bis C++17*)
(bis C++17*)
(bis C++17*)
(bis C++17*)(bis C++17*)(bis C++17*)(bis C++17*)
(bis C++20*)
(bis C++20*)
(bis C++17*)(bis C++17*)
(bis C++17*)(bis C++17*)

(bis C++17*)
(bis C++17*)(bis C++17*)(bis C++17*)(bis C++17*)
(bis C++20*)
(bis C++20*)
 
 
Definiert in der Header-Datei <functional>
template< class R, class T,

          template<class> RQual, template<class> TQual >
    requires (/*ref-wrap-common-reference-exists-with*/<R, T, RQual<R>, TQual<T>> &&
              !/*ref-wrap-common-reference-exists-with*/<T, R, TQual<T>, RQual<R>>)

struct basic_common_reference<R, T, RQual, TQual>;
(1) (seit C++23)
template< class T, class R,

          template<class> TQual, template<class> RQual >
    requires (/*ref-wrap-common-reference-exists-with*/<R, T, RQual<R>, TQual<T>> &&
              !/*ref-wrap-common-reference-exists-with*/<T, R, TQual<T>, RQual<R>>)

struct basic_common_reference<T, R, TQual, RQual>;
(2) (seit C++23)
Hilfskonzepte
template< class R, class T, class RQ, class TQ >

concept /*ref-wrap-common-reference-exists-with*/ =
    /*is-ref-wrapper*/<R> &&
    requires { typename std::common_reference_t<typename R::type&, TQ>; } &&

    std::convertible<RQ, std::common_reference_t<typename R::type&, TQ>>;
(3) (nur Exposition*)

Der gemeinsame Referenztyp eines reference_wrapper (bezeichnet als R) und eines Typs T, die entsprechend mit cv- und Referenzqualifizierern (bezeichnet als RQ bzw. TQ) angewendet werden, ist äquivalent zu einem gemeinsamen Referenztyp des zugrunde liegenden Typs von R, angewendet mit einem lvalue-Referenz- und dem TQ.

Der gemeinsame Referenztyp ist nur dann definiert, wenn R der einzige reference_wrapper ist, der zugrunde liegende Typ von R angewendet mit einem lvalue-Referenz- und dem TQ einen gemeinsamen Referenztyp haben, zu dem RQ konvertierbar sein muss.

Die expositions-only Konstante /*is-ref-wrapper*/<R> ist true genau dann, wenn R eine Spezialisierung von std::reference_wrapper ist.

Inhalt

[bearbeiten] Member types

Mitgliedertyp Definition
type std::common_reference_t<typename R::type&, TQual<T>> (1,2)

[bearbeiten] Notes

Feature-Test-Makro Wert Std Feature
__cpp_lib_common_reference_wrapper 202302L (C++23) std::common_reference_t von std::reference_wrapper zu einem Referenztyp machen

[bearbeiten] Example

#include <concepts>
#include <functional>
 
static_assert(std::same_as<std::common_reference_t<int&,
                                                   std::reference_wrapper<int>>,
                                                   int&>);
static_assert(std::same_as<std::common_reference_t<std::reference_wrapper<int>&,
                                                   int&>,
                                                   int&>);
static_assert(std::same_as<std::common_reference_t<int&,
                                                   const std::reference_wrapper<int>&>,
                                                   int&>);
int main() {}

[bearbeiten] See also

ermittelt den gemeinsamen Referenztyp einer Gruppe von Typen
(Klassenvorlage) [bearbeiten]