¿Existe una función/macro en tiempo de compilación para determinar si una estructura C++ 0x es POD?
typetraits static-assert (1)
C ++ 0x introduce una biblioteca de rasgos de tipo en el encabezado <type_traits>
para este tipo de introspección, y hay un rasgo de tipo is_pod
. Creo que lo static_assert
junto con static_assert
siguiente manera:
static_assert(std::is_pod<A>::value, "A must be a POD type.");
Estoy usando ISO draft N3092 para esto, por lo que existe la posibilidad de que esté desactualizado. Voy a buscar esto en el borrador más reciente para confirmarlo.
EDITAR : De acuerdo con el borrador más reciente ( N3242 ), esto sigue siendo válido. Parece que esta es la manera de hacerlo!
Me gustaría tener un static_assert C ++ 0x que compruebe si un tipo de estructura dado es POD (para evitar que otros programadores lo rompan con nuevos miembros). es decir,
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." );
}
¿Hay algún tipo de macro is_pod_type()
o intrínseca que pueda usar aquí? No pude encontrar uno en ningún documento de C ++ 0x, pero, por supuesto, la información de la web en 0x todavía es bastante fragmentaria.