Classe is_pod

Verifica se il tipo è POD.

Sintassi

template <class T>
struct is_pod;

Parametri

T
Tipo su cui eseguire una query.

Osservazioni:

is_pod<T>::value è true se il tipo T è POD (Plain Old Data). In caso contrario, sarà false.

I tipi aritmetici, i tipi di enumerazione, i tipi di puntatori e i tipi di puntatore a membro sono POD.

Una versione cv-qualified di un tipo POD è a sua volta un tipo POD.

Una matrice di POD è a sua volta POD.

Uno struct o un'unione, in cui tutti i membri dati non statici sono POD, è a sua volta POD se:

  • Non ha costruttori dichiarati dall'utente.

  • Non ha membri dati non statici privati o protetti.

  • Non ha classi di base.

  • Non ha funzioni virtuali.

  • Non ha membri dati non statici di tipo di riferimento.

  • Non ha un operatore di assegnazione di copia definito dall'utente.

  • Non ha un distruttore definito dall'utente.

Pertanto, è possibile creare in modo ricorsivo matrici e struct POD che contengono matrici e struct POD.

Esempio

// 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

Requisiti

Intestazione:<type_traits>

Spazio dei nomi: std

Vedi anche

<type_traits>