add_rvalue_reference, classe
Crée un type de référence rvalue du paramètre de modèle, s’il s’agit d’un type d’objet ou de fonction. Sinon, en raison de la sémantique de réduction de références, le type est le même que celui du paramètre de modèle.
Syntaxe
template <class T>
struct add_rvalue_reference;
template <class T>
using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;
Paramètres
T
Type à modifier.
Notes
La add_rvalue_reference
classe a un membre nommé type
, qui est un alias pour le type d’une référence rvalue au paramètre de modèle T. La sémantique de la réduction des références implique que, pour les types non-objet et non de fonction T, T&&
est un T. Par exemple, lorsque T est un type référence lvalue, add_rvalue_reference<T>::type
est le type de référence lvalue, et non une référence rvalue.
Pour plus de commodité, <type_traits> définit un modèle d’assistance, add_rvalue_reference_t
qui alias le type
membre add_rvalue_reference
.
Exemple
Cet exemple de code utilise static_assert pour montrer comment les types de référence rvalue sont créés à l’aide de add_rvalue_reference
et add_rvalue_reference_t
, et comment le résultat de add_rvalue_reference
sur un type de référence lvalue n’est pas une référence rvalue, mais est réduit au type de référence lvalue.
// ex_add_rvalue_reference.cpp
// Build by using: cl /EHsc /W4 ex_add_rvalue_reference.cpp
#include <type_traits>
#include <iostream>
#include <string>
using namespace std;
int main()
{
static_assert(is_same<add_rvalue_reference<string>::type, string&&>::value,
"Expected add_rvalue_reference_t<string> to be string&&");
static_assert(is_same<add_rvalue_reference_t<string*>, string*&&>::value,
"Expected add_rvalue_reference_t<string*> to be string*&&");
static_assert(is_same<add_rvalue_reference<string&>::type, string&>::value,
"Expected add_rvalue_reference_t<string&> to be string&");
static_assert(is_same<add_rvalue_reference_t<string&&>, string&&>::value,
"Expected add_rvalue_reference_t<string&&> to be string&&");
cout << "All static_assert tests of add_rvalue_reference passed." << endl;
return 0;
}
/*Output:
All static_assert tests of add_rvalue_reference passed.
*/
Spécifications
En-tête : <type_traits>
Espace de noms : std
Voir aussi
<type_traits>
add_lvalue_reference, classe
is_rvalue_reference, classe