के रूप में काम नहीं कर रहा है मैंने हाल ही में एंड्री अलेक्जेंड्रेसकू द्वारा आधुनिक सी ++ डिज़ाइन पढ़ना शुरू कर दिया है। संकलन समय इस प्रकार के दावे पढ़ने के बाद, मैं निम्नलिखित कोड की कोशिश की:मॉडर्न सी ++ डिज़ाइन से संकलितटाइम चेकर
template<bool> struct CompileTimeChecker { CompileTimeChecker(...){}; }; template<> struct CompileTimeChecker<false>{}; #define STATIC_CHECK(expr, msg) \ {\ class ERROR_##msg{}; \ (void)sizeof(CompileTimeChecker<(expr)!=0>((ERROR_##msg()))); /*Line 1*/ } int main() { STATIC_CHECK(sizeof(char)>sizeof(int),TypeTooNarrow); /*Line 2*/ STATIC_CHECK(sizeof(char)<sizeof(int),TypeTooNarrow); /*Line 3*/ }
कोड लाइन 2 की वजह से संकलन नहीं करना चाहिए, लेकिन यह ठीक संकलित करता है। यह उम्मीद के रूप में काम करता है अगर मैं
(void)(CompileTimeChecker<(expr)!=0>((ERROR_##msg()))); /*Line 1*/ }
या
new CompileTimeChecker<(expr)!=0>((ERROR_##msg())); /* Line 1*/ }
को पंक्ति 1 बदल जाते हैं। मुझे यह नहीं मिला।
सटीक डुप्लिकेट (एक ही उपयोगकर्ता): [आधुनिक सी ++ डिज़ाइन से संकलितटाइम चेकर अपेक्षित काम नहीं कर रहा है।] (Http://stackoverflow.com/questions/3934643/compiletimechecker-from-modern-c-design-not-working-as - अपेक्षित) –
डुप्लिकेट के रूप में दूसरे को बंद करें। इसे खोलने दो। –
@ पॉल आर: मुझे लगता है कि @ सौरभ ने दो बार एक ही सवाल पोस्ट किया (गलती से मुझे लगता है), दूसरा इसे पहले से ही एक डुप्लिकेट के रूप में बंद कर दिया गया है और अब आप इसे एक दूसरे के डुप्ली के रूप में देखते हुए बंद कर रहे हैं। –