Me gustaría tener un C++ 0xstatic_assert que compruebe si un tipo de estructura dada es POD (para evitar que otros programadores lo rompa inadvertidamente con nuevos miembros). es decir,¿Hay un func/macro en tiempo de compilación para determinar si una estructura de C++ 0x es 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.");
}
¿Existe algún tipo de is_pod_type()
macro o intrínseca que puedo usar aquí? No pude encontrar ninguno en ningún documento de C++ 0x, pero por supuesto la información de la web en 0x todavía es bastante fragmentaria.
Tenga en cuenta que en C++ 0x, la estructura B no es POD porque no tiene un * constructor predeterminado * trivial (ver 9.0.10 y 9.0.6 en N3242). No estoy seguro de qué cuenta exactamente como un constructor predeterminado trivial (ver 12.1.5), pero sospecho que al agregar 'B() = default;' podría convertir la estructura B en un C++ 0x POD. – Sjoerd