I'd like to have a C++0x static_assert that tests whether a given struct type is POD (to prevent other programmers from inadvertently breaking it with new members). ie,
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." ); }
Is there some kind of is_pod_type()
macro or intrinsic that I can use here? I couldn't find one in any C++0x docs, but of course the web's info on 0x is still rather fragmentary.
C++0x introduces a type traits library in the header <type_traits>
for this sort of introspection, and there is an is_pod
type trait. I believe that you would use it in conjunction with static_assert
as follows:
static_assert(std::is_pod<A>::value, "A must be a POD type.");
I'm using ISO draft N3092 for this, so there's a chance that this is out of date. I'll go look this up in the most recent draft to confirm it.
EDIT: According to the most recent draft (N3242) this is still valid. Looks like this is the way to do it!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With