In der Standard-11 C++ es heißt, dass (siehe cppreference.com, siehe auch Abschnitt 20.4.2.4 des Standards) heißt es, dassWarum std :: make_tuple std :: reference_wrapper <X> Argumente in X &?
template< class... Types >
tuple<VTypes...> make_tuple(Types&&... args);
ein Tupel Objekt erstellt, von den Arten der Zieltyp herzuleiten von Argumenten.
Für jeden
Ti
inTypes...
, der entsprechenden TypVi
inVtypes...
std::decay<Ti>::type
ist, es sei denn Anwendungstd::decay
Ergebnisse instd::reference_wrapper<X>
für irgendeine ArtX
, in welchem Fall der abgeleitete TypX&
ist.
Ich frage mich: Warum werden Referenzwrapper speziell hier behandelt?
Ich denke, der Hauptpunkt ist 'std :: reference_wrapper' ist ein konventioneller Marker (speziell behandelt), der vor rvalue Referenzen notwendig war, siehe http://stackoverflow.com/questions/20080493/semantics-for-wrapped-objects -referenzwert-per-standard-via-stdmove-stdref? rq = 1. Ich denke, es sollte in C++ 11 mehr nötig sein, aber die Konvention hielt an. – alfC