निम्नलिखित स्निपेट पर विचार करें?
इसका व्याख्या कैसे किया जाता है?{} में शून्य {{}) क्या है?</p> <pre><code>auto f() { return void({}); } int main() { f(); } </code></pre> <p>वास्तव में क्या <code>void({})</code> में <code>{}</code> है:
बिल्कुल जिज्ञासा से बाहर। चलो कुछ और आगे जाओ।
ध्यान दें कि दोनों जीसीसी 6.1 और क्लैंग 3.8 दोनों त्रुटियों (-std=c++14 -pedantic
) के साथ संकलित करते हैं।
चेतावनी:
बाद में शिकायत नहीं है, पूर्व में एक चेतावनी से पता चलता गैर वर्ग प्रकार के लिए सूची-प्रारंभकर्ता
parenthesized नहीं किया जाना चाहिए बजाय -pedantic-errors
का उपयोग करना, जीसीसी एक त्रुटि के साथ समाप्त होता है जबकि क्लैंग इसे संकलित करता है।
क्या यह विसंगति दो कंपाइलरों में से एक की त्रुटि है?
मेरा मतलब है, क्या यह वैध कोड है जिसे स्वीकार किया जाना चाहिए या नहीं?
कुछ भाषाओं में, यह एक खाली तालिका या सूची को दर्शाता है। हालांकि, टाइप आधारित भाषाओं में, इसमें एक प्रकार का विनिर्देश होना चाहिए। प्रारंभकर्ता होने के साथ इसका कोई संबंध नहीं है, इसलिए आईएमओ, यह कुछ प्रकार के रिक्त ब्लॉक स्कोप की तरह दिखता है। – Chemistpp
एक क्लैंग बग की तरह लगता है। यह [\ [expr.type.conv \]/2] पर जाता है (https://timsong-cpp.github.io/cppwp/expr.type.conv#2) "अन्यथा, अभिव्यक्ति का एक प्रकोप है निर्दिष्ट प्रकार जिसका परिणाम ऑब्जेक्ट प्रारंभिक के साथ प्रत्यक्ष-प्रारंभिक ([dcl.init]) है। ", जो 'शून्य' के लिए कोई समझ नहीं लेता है। –
यह लैम्ब्डा अभिव्यक्ति के रूप में दिखता है: [link] (http://en.cppreference.com/w/cpp/language/lambda) – Raindrop7