Nel C++ 11 norma si afferma che (vedi cppreference.com, vedi anche la sezione 20.4.2.4 della norma) si afferma chePerché gli argomenti di std :: make_tuple trasformano std :: reference_wrapper <X> in X &?
template< class... Types >
tuple<VTypes...> make_tuple(Types&&... args);
Crea un oggetto tupla, dedurre il tipo di destinazione dai tipi di argomenti.
Per ogni
Ti
inTypes...
, corrispondente tipoVi
inVtypes...
èstd::decay<Ti>::type
salvo applicazionestd::decay
risultati instd::reference_wrapper<X>
per qualche tipoX
, nel qual caso il tipo dedotta èX&
.
Mi chiedo: perché i wrapper di riferimento sono considerati speciali qui?
Penso che il punto principale sia 'std :: reference_wrapper' è un marker convenzionale (trattato appositamente) che era necessario prima dei riferimenti rvalue, vedere http://stackoverflow.com/questions/20080493/semantics-for-wrapped-objects -reference-value-by-default-via-stdmove-stdref? rq = 1. Penso che dovrebbe essere più necessario in C++ 11 ma la convenzione persisteva. – alfC