c++ typetraits static-assert c++11

¿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.