Namespaces
Variants

std::experimental::propagate_const<T>:: propagate_const

From cppreference.net
constexpr propagate_const ( ) = default ;
(1) (Library Fundamentals TS v2)
constexpr propagate_const ( propagate_const && p ) = default ;
(2) (Library Fundamentals TS v2)
template < class U >
/* siehe unten */ constexpr propagate_const ( propagate_const < U > && pu ) ;
(3) (Library Fundamentals TS v2)
template < class U >
/* siehe unten */ constexpr propagate_const ( U && u ) ;
(4) (Library Fundamentals TS v2)
propagate_const ( const propagate_const & ) = delete ;
(5) (Library Fundamentals TS v2)

Lassen Sie t_ das private Datenelement bezeichnen, das das umschlossene zeigerähnliche Objekt ist.

1) Konstruiert ein propagate_const , das this - > t_ standardmäßig initialisiert.
2) Explizit defaulteter Move-Konstruktor, der this - > t_ aus p. t_ move-konstruiert.
3) Initialisiert this - > t_ wie durch direkte Nicht-Listen-Initialisierung aus dem Ausdruck std :: move ( pu. t_ ) .
Dieser Konstruktor nimmt nicht an der Überladungsauflösung teil, es sei denn std:: is_constructible < T, U > :: value ist true , und ist explicit genau dann, wenn std:: is_convertible < U, T > :: value ist false .
4) Initialisiert this - > t_ wie durch direkte Nicht-Listen-Initialisierung mit dem Ausdruck std:: forward < U > ( u ) .
Dieser Konstruktor nimmt nicht an der Überladungsauflösung teil, es sei denn std:: is_constructible < T, U > :: value ist true und std:: decay_t < U > ist keine Spezialisierung von propagate_const . Dieser Konstruktor ist explicit genau dann, wenn std:: is_convertible < U, T > :: value ist false .
5) Der Kopierkonstruktor ist explizit gelöscht. propagate_const ist nicht kopierbar.

Parameter

p - ein weiteres propagate_const Objekt, von dem verschoben werden soll
pu - ein weiteres propagate_const Objekt einer anderen Spezialisierung, von dem verschoben werden soll
u - ein weiteres Objekt, mit dem der enthaltene Zeiger initialisiert werden soll

Hinweise

In Library Fundamental TS v2 (basierend auf C++14), (4) und (5) werden typischerweise in explicit /non- explicit Überladungspaaren implementiert. Seit Library Fundamental TS v3 (basierend auf C++20) können sie in bedingten explicit Spezifizierern implementiert werden.