"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > `static_assert` सभी कंपाइलरों में गैर-प्रकार टेम्पलेट पैरामीटर्स के साथ अलग-अलग व्यवहार क्यों करता है?

`static_assert` सभी कंपाइलरों में गैर-प्रकार टेम्पलेट पैरामीटर्स के साथ अलग-अलग व्यवहार क्यों करता है?

2024-11-09 को प्रकाशित
ब्राउज़ करें:261

Why Does `static_assert` Behave Differently with Non-Type Template Parameters Across Compilers?

संकलकों में गैर-प्रकार टेम्पलेट पैरामीटर्स के साथ 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