मुझे एक सी ++ 0x static_assert होना चाहिए जो परीक्षण करता है कि कोई दिया गया संरचना प्रकार POD है (अन्य प्रोग्रामर अनजाने में नए सदस्यों के साथ इसे तोड़ने से रोकने के लिए)। यानी,क्या कोई संकलन-समय func/macro यह निर्धारित करने के लिए है कि कोई C++ 0x संरचना पीओडी है या नहीं?
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_pod_type()
किसी तरह का मैक्रो या आंतरिक कि मैं यहाँ का उपयोग कर सकते है? मुझे किसी भी C++ 0x दस्तावेज़ों में कोई नहीं मिला, लेकिन निश्चित रूप से 0x पर वेब की जानकारी अभी भी खंडित है।
ध्यान दें कि सी ++ 0x में, स्ट्रक्चर बी पीओडी नहीं है क्योंकि इसमें * ट्राइविअल डिफॉल्ट कन्स्ट्रक्टर * नहीं है (N3242 में 9.0.10 और 9.0.6 देखें)। मुझे यकीन नहीं है कि वास्तव में एक छोटे से डिफ़ॉल्ट कन्स्ट्रक्टर के रूप में क्या मायने रखता है (12.1.5 देखें), लेकिन संदेह है कि 'बी() = डिफ़ॉल्ट जोड़ना;' संरचना बी को सी ++ 0x पीओडी में बदल सकता है। – Sjoerd