का अर्थ निम्न कोड के लिए:घोषणा में परिवर्तन प्रतीक
struct foo {};
struct A
{
typedef foo foo_type;
void foo();
};
जीसीसी एक संकलक त्रुटि देता है:
test.cpp:7:14: error: declaration of 'void A::foo()' [-fpermissive]
void foo();
^
test.cpp:1:8: error: changes meaning of 'foo' from 'struct foo' [-fpermissive]
struct foo {};
^
लेकिन बजना संकलक त्रुटियों के बिना यह स्वीकार करता है। कौन सही है?
ध्यान दें कि अगर टाइपिफ़ हटा दिया गया है, या typedef ::foo foo_type
में बदल दिया गया है, तो दोनों जीसीसी और क्लैंग कोड स्वीकार करते हैं।
असली सवाल यह है: * क्यों * क्लैंग हमेशा सही है? –
जब कोई टाइपिफ़ नहीं है तो यह अजीब नहीं है – 4pie0
@ cf16: मैंने यह नहीं कहा था कि यह था। मैं बस यह इंगित करना चाहता था कि, टाइप किए गए त्रुटि का उल्लेख नहीं करने के बावजूद, टाइपपीफ में त्रुटि के साथ कुछ करना है। – HighCommander4