Test for "POD-ness" in c++/c++11?
std::is_pod<A>::value
in C++11.
[Edit: refer to Luc's comment above, in C++11 you don't need the type to be POD for what you're doing.
For that matter you also don't need to cast to void*
, and C-style casting pointers to void*
unnecessarily is a tiny bit risky, because some day you'll cast away const
by accident!]
In C++03 there's no standard way to do it, but Boost has its own is_pod
that errs on the side of caution on compilers that don't provide a non-standard way to find out. So it's useful if you're writing code where the POD special case is an optimization (you just won't get the optimization everywhere). It's also useful if you only care about compilers for which Boost can get an accurate answer. It's not so good if false negatives by is_pod
cause your code to give up in disgust.
The standard (C++98) says that only types with C-like construction/destruction semantics can be members of a union. That covers most of the things that would make a type non-POD, so just define a union type with a member of type A and the compiler should complain if A is not POD.