Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a compile-time func/macro to determine if a C++0x struct is POD?

Tags:

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.

like image 455
Crashworks Avatar asked Aug 24 '11 00:08

Crashworks


1 Answers

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!

like image 60
templatetypedef Avatar answered Sep 25 '22 13:09

templatetypedef