is_pod, classe

Teste si le type est POD.

Syntaxe

template <class T>
struct is_pod;

Paramètres

T
Type à interroger.

Notes

is_pod<T>::value est true si le type T est Plain Old Data (POD). Sinon, il est false.

Les types arithmétiques, les types énumération, les types pointeur et les pointeurs vers des types de membres sont des types POD.

Une version cv-qualified d'un type POD est elle-même un type POD.

Un tableau de POD est lui-même POD.

Une structure ou une union, dont tous les membres de données non statiques sont POD, est elle-même POD si elle n'a :

  • aucun constructeur déclaré par l'utilisateur ;

  • aucun membre de données non statiques privé ou protégé ;

  • aucune classe de base ;

  • aucune fonction virtuelle ;

  • aucun membre de données non statiques de type référence ;

  • aucun opérateur d'assignation de copie défini par l'utilisateur ;

  • aucun destructeur défini par l'utilisateur.

Par conséquent, vous pouvez générer de manière récursive des structs et des tableaux POD qui contiennent des structs et des tableaux POD.

Exemple

// std__type_traits__is_pod.cpp
// compile with: /EHsc
#include <type_traits>
#include <iostream>

struct trivial {
    int val;
};

struct throws {
    throws() {}  // User-declared ctor, so not POD

    int val;
};

int main() {
    std::cout << "is_pod<trivial> == " << std::boolalpha
        << std::is_pod<trivial>::value << std::endl;
    std::cout << "is_pod<int> == " << std::boolalpha
        << std::is_pod<int>::value << std::endl;
    std::cout << "is_pod<throws> == " << std::boolalpha
        << std::is_pod<throws>::value << std::endl;

    return (0);
}
is_pod<trivial> == true
is_pod<int> == true
is_pod<throws> == false

Spécifications

Header :<type_traits>

Espace de noms : std

Voir aussi

<type_traits>