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