Namespaces
Variants

std:: is_pointer

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

std::is_pointer est un UnaryTypeTrait .

Vérifie si T est un pointeur vers un objet ou une fonction (y compris un pointeur vers void , mais excluant les pointeurs vers membres) ou une version qualifiée cv de celui-ci. Fournit la constante membre value qui est égale à true , si T est un type pointeur vers objet/fonction. Sinon, value est égale à false .

Si le programme ajoute des spécialisations pour std::is_pointer ou std::is_pointer_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_pointer_v = is_pointer < T > :: value ;
(depuis C++17)

Hérité de std:: integral_constant

Constantes membres

value
[static]
true si T est un type pointeur, 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_pointer : std::false_type {};
template<class T>
struct is_pointer<T*> : std::true_type {};
template<class T>
struct is_pointer<T* const> : std::true_type {};
template<class T>
struct is_pointer<T* volatile> : std::true_type {};
template<class T>
struct is_pointer<T* const volatile> : std::true_type {};
**Note:** Le code C++ présenté dans les balises `
` n'a pas été traduit conformément aux instructions, car il contient des termes spécifiques au C++ et du code source qui doit rester inchangé pour préserver sa fonctionnalité et sa précision technique.

Exemple

#include <type_traits>
int main()
{
    struct A
    {
        int m;
        void f() {}
    };
    int A::*mem_data_ptr = &A::m;     // un pointeur vers un membre de données
    void (A::*mem_fun_ptr)() = &A::f; // un pointeur vers une fonction membre
    static_assert(
           ! std::is_pointer<A>::value
        && ! std::is_pointer_v<A>    // même chose que ci-dessus, mais en C++17 !
        && ! std::is_pointer<A>()    // identique à ci-dessus, utilisant l'opérateur bool hérité
        && ! std::is_pointer<A>{}    // idem
        && ! std::is_pointer<A>()()  // identique à ci-dessus, utilisant l'opérateur() hérité
        && ! std::is_pointer<A>{}()  // idem
        &&   std::is_pointer_v<A*>
        &&   std::is_pointer_v<A const* volatile>
        && ! std::is_pointer_v<A&>
        && ! std::is_pointer_v<decltype(mem_data_ptr)>
        && ! std::is_pointer_v<decltype(mem_fun_ptr)>
        &&   std::is_pointer_v<void*>
        && ! std::is_pointer_v<int>
        &&   std::is_pointer_v<int*>
        &&   std::is_pointer_v<int**>
        && ! std::is_pointer_v<int[10]>
        && ! std::is_pointer_v<std::nullptr_t>
        &&   std::is_pointer_v<void (*)()>
    );
}

Voir aussi

vérifie si un type est un pointeur vers une fonction membre non statique ou un objet
(modèle de classe)
vérifie si un type est un pointeur vers un objet membre non statique
(modèle de classe)
vérifie si un type est un pointeur vers une fonction membre non statique
(modèle de classe)
(C++11)
vérifie si un type est un type tableau
(modèle de classe)
(C++11)
vérifie si un type est un type scalaire
(modèle de classe)