Classe is_pod
Testa se o tipo é um POD.
Sintaxe
template <class T>
struct is_pod;
Parâmetros
T
O tipo a ser consultado.
Comentários
is_pod<T>::value
será true
se o tipo T for POD (Plain Old Data). Caso contrário, será false
.
Tipos aritméticos, tipos de enumeração, tipos de ponteiro e tipos de ponteiro para membro são POD.
Uma versão qualificada para CV de um tipo POD também é um tipo POD.
Uma matriz de POD também é POD.
Um struct ou união, de que todos os membros de dados não estáticos forem POD, também será POD se não tiver:
nenhum construtor declarado pelo usuário.
nenhum membro de dados não estáticos particular ou protegido.
Nenhuma classe base.
nenhuma função virtual.
nenhum membro de dados não estáticos do tipo de referência.
nenhum operador de atribuição de cópia definido pelo usuário.
nenhum destruidor definido pelo usuário.
Portanto, é possível compilar recursivamente structs e matrizes POD que contêm structs e matrizes POD.
Exemplo
// 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
Requisitos
Cabeçalho:<type_traits>
Namespace: std