Mi piacerebbe avere un C++ 0x static_assert che verifica se un determinato tipo di struttura è POD (per impedire ad altri programmatori di interromperlo inavvertitamente con nuovi membri). vale a dire,Esiste una funzione/macro in fase di compilazione per determinare se una struttura C++ 0x è POD?
struct A // is a POD type
{
int x,y,z;
}
struct B // is not a POD type (has a nondefault ctor)
{
int x,y,z;
B(int _x, int _y, int _z) : x(_x), y(_y), z(_z) {}
}
void CompileTimeAsserts()
{
static_assert(is_pod_type(A) , "This assert should not fire.");
static_assert(is_pod_type(B) , "This assert will fire and scold whoever added a ctor to the POD type.");
}
C'è una sorta di is_pod_type()
macro o intrinseca che posso usare qui? Non sono riuscito a trovarne uno in nessun documento C++ 0x, ma ovviamente le informazioni sul web su 0x sono ancora piuttosto frammentarie.
Si noti che in C++ 0x, struct B non è POD perché non ha un costruttore * banale di default * (vedere 9.0.10 e 9.0.6 in N3242). Non sono sicuro di ciò che conta esattamente come un banale costruttore di default (vedi 12.1.5), ma sospetto che l'aggiunta di 'B() = default;' possa trasformare struct B in un COD 0x C++. – Sjoerd