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


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.