Compartilhar via


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

Confira também

<type_traits>