जीसीसी एक गैर-गठित कॉन्स्ट्रेक्ट लैम्बडा कॉल की रिपोर्ट करने में विफल रहता है


9

अनिर्धारित व्यवहार के लिए दो परीक्षण-मामले नीचे दिए गए हैं, जिन्हें IIFE के रूप में व्यक्त किया गया है (तुरंत कॉल किया गया लैम्ब्डा-एक्सप्रेशन):

constexpr auto test3 = []{
    int* p{};
    {   
        int x{};
        p = &x;
    }
    return *p; // Undefined Behaviour
}(); // IIFE

constexpr auto test4 = []{
    int x = std::numeric_limits<int>::min();
    int y = -x;  // Undefined Behaviour
    return y;
}();

int main() {}

जब जीसीसी ट्रंक के साथ संकलित किया जाता है, तो test4इसे सही ढंग से खारिज कर दिया जाता है क्योंकि यह एक में अपरिभाषित व्यवहार को प्रदर्शित करता हैconstexpr । दूसरी ओर test3स्वीकार किया जाता है।

क्या जीसीसी को स्वीकार करना सही है test3?


4
@ पूर्व में जाना जाता है_463035818 मानक के लिए आवश्यक है कि एक कॉन्स्ट्रेक्ट में सभी यूबी का निदान किया जाए।
— नेथनऑलिवर

@NathanOliver ओह धन्यवाद। यही कारण है कि मैं कैसे सीखता हूं, मैं गलतियां करता हूं;)
— idclev 463035818

हां। GCC बग जैसा दिखता है
— नाथनऑलवर

मैं इसकी रिपोर्ट करूंगा।
— विमलोपान

जवाबों:


7

क्या GCC टेस्ट 3 को स्वीकार करने के लिए सही है?

नहीं, यह जीसीसी बग है। मैंने इसे बग # 93389 के रूप में रिपोर्ट किया है ।


सवाल और जवाब को सुव्यवस्थित करने के लिए धन्यवाद!
— विमलोपन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.