2013-07-30 7 views
6

निम्नलिखित सी ++ 11 कार्यक्रम जीसीसी 4.7 के साथ संकलित किया गया है जब:सी ++ 11 जीसीसी: घोषणा में स्पष्ट योग्यता? मानक रेफरी?

extern int i; 
int ::i; 

int main() 
{ 
} 

जीसीसी शिकायत है कि:

error: explicit qualification in declaration of `i` 

इस गैर अनुरूप व्यवहार है? मानक में कहां इस कार्यक्रम को खराब गठित माना जाता है?

8.3p1 संकेत मिलता है कि यह अनुमति दी जानी चाहिए लगता है:

तो क्वालीफायर वैश्विक :: गुंजाइश संकल्प ऑपरेटर है, declarator-आईडी एक नाम वैश्विक नाम स्थान दायरे में घोषित करने के लिए संदर्भित करता है।

अद्यतन:

N3485 8.3p1 से:

declarators की एक सूची एक वैकल्पिक (क्लॉज 7) डीईसीएल-विनिर्देशक-सेक (7.1) के बाद दिखाई देता है। प्रत्येक घोषणाकर्ता में बिल्कुल एक घोषणाकर्ता-आईडी होता है; यह घोषित पहचानकर्ता का नाम है। एक घोषणाकर्ता में होने वाली एक अयोग्य आईडी- आईडी कुछ विशेष कार्यों (12.3, 12.4, 13.5) की घोषणा के अलावा और टेम्पलेट विशेषज्ञता या आंशिक विशेषज्ञता (14.7) की घोषणा के अलावा एक साधारण पहचानकर्ता होगी। जब घोषणाकर्ता-आईडी योग्यता प्राप्त होती है, घोषणा कक्षा या नामस्थान के पूर्व घोषित सदस्य को संदर्भित करेगी जिसमें क्वालीफायर संदर्भित करता है (या, नामस्थान के मामले में, उस नामस्थान के इनलाइन नेमस्पेस सेट के तत्व के तत्व के संदर्भ में (7.3.1)) या इसके विशेषज्ञता के लिए; सदस्य को घोषणाकर्ता-आईडी के नेस्टेड-नाम-विनिर्देशक द्वारा नामित कक्षा या नामस्थान के दायरे में केवल उपयोग-घोषणा द्वारा पेश नहीं किया जाएगा। एक योग्य घोषणाकर्ता-आईडी का नेस्टेड-नाम-विनिर्देश अस्वीकरण-विनिर्देशक से शुरू नहीं होगा। [नोट: यदि क्वालीफायर वैश्विक :: स्कोप रिज़ॉल्यूशन ऑपरेटर है, तो घोषणाकर्ता-आईडी वैश्विक नामस्थान स्कोप में घोषित नाम को संदर्भित करता है। - अंत नोट] घोषित करने वाली इकाई पर एक घोषणाकर्ता-आईडी appertains के बाद वैकल्पिक विशेषता-विनिर्देशक-सीक।

उत्तर

12

और अगले ही वाक्य (n3337 में) कहते हैं:

एक declarator-आईडी quali फाई एड अपने वर्ग के बाहर एक सदस्य समारोह या स्थिर डेटा सदस्य के डी फाई nition के लिए छोड़कर नहीं होगा , नेमस्पेस के बाहर किसी नामस्थान के फ़ंक्शन या वेरिएबल सदस्य का डिफिशन या स्पष्ट तत्कालता, या उसके नामस्थान के बाहर एक स्पष्ट विशेषज्ञता का बहिष्कार, या मित्र फ़ंक्शन की घोषणा जो किसी अन्य वर्ग या नामस्थान का सदस्य है ।

अपवादों के बीच वैश्विक चर की परिभाषा का उल्लेख नहीं किया गया है।

+0

आप किस दस्तावेज़ संस्करण का उपयोग कर रहे हैं? मैं N3485 –

+0

पर देख रहा हूं मैंने N3485 8.3p1 के पूर्ण अनुच्छेद के साथ अपना उत्तर अपडेट किया। –

+0

@ user1131467 n3337। मैं भी n3690 की जांच करूंगा, मुझे एक सेकंड दें। – jrok

4

जीसीसी सी ++ 11 के अनुसार सही है। सी ++ 14 में, इसकी अनुमति होगी।देखें http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#482

+1

अजीब है कि 2004 में 482 प्रस्तावित किया गया था और इसे 12 नवंबर तक नहीं बनाया गया था। –

संबंधित मुद्दे