2014-06-14 10 views
5

मैंने नामस्थान परिभाषा के बारे में अनुभाग पढ़ा है। N3797 के क्लॉज 7.3.1 कहा:इनलाइन नेमस्पेस और एक्सटेंशन नेमस्पेस

इनलाइन कीवर्ड एक्सटेंशन-नाम स्थान परिभाषा केवल अगर यह पहले से है कि नाम स्थान के लिए मूल-नाम स्थान परिभाषा पर इस्तेमाल किया गया था पर इस्तेमाल किया जा सकता है।

namespace M 
{ 
    int h; 
} 

inline namespace M 
{ 
    int j = 6; 
} 

यह दोनों -std=c++11 साथ और कहा कि विकल्प के बिना सफल संकलित:

निम्नलिखित कोड का टुकड़ा पर विचार करें। क्या आप उस व्यवहार को समझा सकते हैं? क्या यह g++ बग है?

उत्तर

4

मानक का संदर्भ संदर्भ स्पष्ट है: इसकी अनुमति नहीं है।

बजना का उपयोग ++ मैं इस बारे में बहुत स्पष्ट त्रुटि संदेश मिलता है:

Test0614-1.cpp:17:18: error: non-inline namespace cannot be reopened as inline 
inline namespace M 
       ^
Test0614-1.cpp:12:11: note: previous definition is here 
namespace M 
     ^

तो यह निश्चित रूप से ग्राम में एक बग है ++। वैसे, यह यहां बताया गया है: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53402

तथ्य यह है कि संकलक मानक के पिछले संस्करण के लिए इनलाइन नेमस्पेस स्वीकार करता है और कम से कम एक चेतावनी के बिना एक मुद्दा प्रतीत होता है। यह पहले से ही 2010 में बग के रूप में रिपोर्ट किया गया था और तय किया जाना चाहिए था: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43824

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