Partage via


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_tqui 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