संकलकों में गैर-प्रकार टेम्पलेट पैरामीटर्स के साथ static_assert का असंगत व्यवहार
C में, static_assert का उपयोग संकलन समय पर स्थितियों को सत्यापित करने के लिए किया जा सकता है . हालाँकि, एक हालिया अवलोकन से विभिन्न कंपाइलरों में गैर-प्रकार टेम्पलेट मापदंडों के साथ संयोजन में उपयोग किए जाने पर static_assert के व्यवहार में असमानता का पता चला है।
विशेष रूप से, निम्नलिखित कोड स्निपेट:
template
struct Hitchhiker {
static_assert(sizeof(answer) != sizeof(answer), "Invalid answer");
};
template
struct Hitchhiker {};
static_assert का उपयोग करके सामान्य टेम्पलेट इंस्टेंटेशन को अक्षम करने का प्रयास करते समय क्लैंग और जीसीसी पर अलग-अलग व्यवहार करता है। क्लैंग तब भी एस्टर त्रुटि को ट्रिगर करता है जब टेम्प्लेट इंस्टेंटिअट नहीं होता है, जबकि जीसीसी केवल 42 के अलावा किसी अन्य पैरामीटर मान के साथ इंस्टेंशियेशन पर त्रुटि को बढ़ाता है।
विसंगति को समझने के लिए, आइए सी मानक के प्रासंगिक अनुभाग का पता लगाएं ( [temp.res]/8):
If no valid specialization can be generated for a template, and that template is not instantiated, the template is ill-formed, no diagnostic required.
इस नियम के अनुसार, प्राथमिक टेम्प्लेट हिचहाइकर ख़राब है क्योंकि कोई वैध विशेषज्ञता उत्पन्न नहीं की जा सकती है। इस प्रकार, डायग्नोस्टिक जारी करने की आवश्यकता नहीं है। हालाँकि, क्लैंग आवश्यकता की कमी के बावजूद डायग्नोस्टिक प्रदान करने का विकल्प चुनता है। ]
टेम्पलेट संरचना सहयात्री {};अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3