Namespaces
Variants

std:: is_rvalue_reference

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
is_rvalue_reference
(C++11)
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
Défini dans l'en-tête <type_traits>
template < class T >
struct is_rvalue_reference ;
(depuis C++11)

std::is_rvalue_reference est un UnaryTypeTrait .

Vérifie si T est un type de référence rvalue. Fournit la constante membre value qui est égale à true si T est un type de référence rvalue. Sinon, value est égale à false .

Si le programme ajoute des spécialisations pour std::is_rvalue_reference ou std::is_rvalue_reference_v , le comportement est indéfini.

Table des matières

Paramètres du modèle

T - un type à vérifier

Modèle de variable d'assistance

template < class T >
constexpr bool is_rvalue_reference_v = is_rvalue_reference < T > :: value ;
(depuis C++17)

Hérité de std:: integral_constant

Constantes membres

value
[static]
true si T est un type de référence rvalue, false sinon
(constante membre publique statique)

Fonctions membres

operator bool
convertit l'objet en bool , retourne value
(fonction membre publique)
operator()
(C++14)
retourne value
(fonction membre publique)

Types membres

Type Définition
value_type bool
type std:: integral_constant < bool , value >

Implémentation possible

template<class T> struct is_rvalue_reference : std::false_type {};
template<class T> struct is_rvalue_reference<T&&> : std::true_type {};

Exemple

#include <iostream>
#include <type_traits>
class A {};
static_assert
(
    std::is_rvalue_reference_v<A> == false and
    std::is_rvalue_reference_v<A&> == false and
    std::is_rvalue_reference_v<A&&> != false and
    std::is_rvalue_reference_v<char> == false and
    std::is_rvalue_reference_v<char&> == false and
    std::is_rvalue_reference_v<char&&> != false
);
template <typename T>
void test(T&& x)
{
    static_assert(std::is_same_v<T&&, decltype(x)>);
    std::cout << "T\t" << std::is_rvalue_reference<T>::value << '\n';
    std::cout << "T&&\t" << std::is_rvalue_reference<T&&>::value << '\n';
    std::cout << "decltype(x)\t" << std::is_rvalue_reference<decltype(x)>::value << '\n';
}
int main()
{
    std::cout << std::boolalpha;
    std::cout << "A\t" << std::is_rvalue_reference<A>::value << '\n';
    std::cout << "A&\t" << std::is_rvalue_reference<A&>::value << '\n';
    std::cout << "A&&\t" << std::is_rvalue_reference<A&&>::value << '\n';
    std::cout << "char\t" << std::is_rvalue_reference<char>::value << '\n';
    std::cout << "char&\t" << std::is_rvalue_reference<char&>::value << '\n';
    std::cout << "char&&\t" << std::is_rvalue_reference<char&&>::value << '\n';
    std::cout << "\ntest(42)\n";
    test(42);
    std::cout << "\ntest(x)\n";
    int x = 42;
    test(x);
}

Sortie :

A	false
A&	false
A&&	true
char	false
char&	false
char&&	true
test(42)
T	false
T&&	true
decltype(x)	true
test(x)
T	false
T&&	false
decltype(x)	false

Voir aussi

vérifie si un type est une lvalue reference
(modèle de classe)
vérifie si un type est soit une lvalue reference soit une rvalue reference
(modèle de classe)