Namespaces
Variants

std:: remove_reference

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
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 remove_reference ;
(depuis C++11)

Si le type T est un type référence, fournit le typedef membre type qui est le type référencé par T . Sinon, type est T .

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

Table des matières

Types membres

Nom Définition
type le type référencé par T ou T s'il n'est pas une référence

Types auxiliaires

template < class T >
using remove_reference_t = typename remove_reference < T > :: type ;
(depuis C++14)

Implémentation possible

template<class T> struct remove_reference { typedef T type; };
template<class T> struct remove_reference<T&> { typedef T type; };
template<class T> struct remove_reference<T&&> { typedef T type; };

Exemple

#include <iostream>
#include <type_traits>
int main()
{
    std::cout << std::boolalpha;
    std::cout << "std::remove_reference<int>::type is int? "
              << std::is_same<int, std::remove_reference<int>::type>::value << '\n';
    std::cout << "std::remove_reference<int&>::type is int? "
              << std::is_same<int, std::remove_reference<int&>::type>::value << '\n';
    std::cout << "std::remove_reference<int&&>::type is int? "
              << std::is_same<int, std::remove_reference<int&&>::type>::value << '\n';
    std::cout << "std::remove_reference<const int&>::type is const int? "
              << std::is_same<const int,
                              std::remove_reference<const int&>::type>::value << '\n';
}

Sortie :

std::remove_reference<int>::type is int? true
std::remove_reference<int&>::type is int? true
std::remove_reference<int&&>::type is int? true
std::remove_reference<const int&>::type is const int? true

Voir aussi

vérifie si un type est soit une référence lvalue soit une référence rvalue
(modèle de classe)
ajoute une référence lvalue ou rvalue au type donné
(modèle de classe)
combine std::remove_cv et std::remove_reference
(modèle de classe)