c++ - Declaration of method changes meaning of symbol -
निम्न कोड के लिए:
struct foo {}; संरचना ए {टाइप किए गए एफू foo_type; शून्य foo (); }; जीसीसी एक कंपाइलर त्रुटि देता है: test.cpp: 7: 14: त्रुटि: 'शून्य ए :: एफू ()' की घोषणा [- Fpermissive] शून्य foo (); ^ Test.cpp: 1: 8: त्रुटि: 'फू' का अर्थ 'स्ट्रक्चर फू' से होता है [-fpermissive] struct foo {}; ^ लेकिन क्लैग कंपाइलर त्रुटियों के बिना इसे स्वीकार करता है कौन सही है?
ध्यान दें कि यदि टाइप कियाइफ़ निकाल दिया गया है, या टाइप किया गया है, तो जीसीसी और क्लैंग दोनों कोड स्वीकार करते हैं।
जीसीसी सही है, लेकिन निदान (3.3.7) देना जरूरी नहीं है:
कक्षा एस में इस्तेमाल किया जाने वाला एक नाम एन अपने संदर्भ में एक ही घोषणा को संदर्भित करेगा और एस के पूर्ण दायरे में पुनः मूल्यांकन किया जाएगा। इस नियम के उल्लंघन के लिए कोई नैदानिक की आवश्यकता नहीं है। < P> यह कैसे वर्ग के दायरे का काम करता है के कारण है foo का void foo (); वर्ग के संपूर्ण दायरे में दिखाई देता है ए , इसलिए घोषणा void foo (); का foo के अर्थ में परिवर्तन को struct foo को फ़ंक्शन के नाम से संदर्भित करने के लिए foo ।
Comments
Post a Comment