जब मैं g++
typedef परिवर्तन अर्थ
template<class T>
class A
{};
template<class T>
class B
{
public:
typedef A<T> A;
};
साथ निम्नलिखित स्निपेट संकलन संकलक मुझे,
error: declaration of ‘typedef class A<T> B<T>::A’
error: changes meaning of ‘A’ from ‘class A<T>’
बताता है दूसरी ओर अगर मैं typedef
typedef ::A<T> A;
बदल सब कुछ g++
के साथ ठीक संकलित करता है। Clang ++ 3.1 किसी भी तरह से परवाह नहीं करता है।
ऐसा क्यों हो रहा है? और दूसरा व्यवहार मानक है?
यह चेतावनी स्तर होना चाहिए जो डिफ़ॉल्ट रूप से इसे एक त्रुटि के रूप में दिखाता है। जैसा कि आपके पास एक फ़ंक्शन अनुपलब्ध रिटर्न हो सकता है और एक त्रुटि या चेतावनी के रूप में रिपोर्ट किया जा सकता है। आम तौर पर, मैं ए के रूप में घोषित प्रकार ए से बचने से बचूंगा। यह बाद में भ्रमित हो जाएगा। –
Grzegorz
मुझे नहीं पता कि मानक क्या कहता है, लेकिन मुझे खुशी है कि g ++ शिकायत करता है ... यह सिर्फ मूर्ख है। –
मुझे लगता है कि यह न तो मूर्ख है, न ही भ्रमित है। मैं अक्सर इस समस्या में भाग लेता हूं। त्रुटि रूपांतरण के लिए चेतावनी के लिए, मैं किसी भी झंडे को g ++ नहीं दे रहा हूं, डिफ़ॉल्ट रूप से त्रुटियों में यह कौन सी चेतावनियां परिवर्तित होती है? – foxcub