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