सी ++ में आप अज्ञात नेमस्पेस के अंदर अपनी कक्षा और फ़ंक्शन परिभाषाओं को लपेटकर आंतरिक लिंक निर्दिष्ट करते हैं। आप टेम्पलेट्स को स्पष्ट रूप से तत्काल भी कर सकते हैं, लेकिन टेम्पलेट्स के किसी भी स्पष्ट तत्कालता के अनुरूप मानकों के अनुरूप एक ही नामस्थान में होना चाहिए। AFAICT इस संकलन करना चाहिए, लेकिन जीसीसी उस पर विफल रहता है:क्या अनाम नामस्थान सभी नामस्थान संलग्न करता है?
namespace foo {
template<class T>
class bar {};
}
using namespace foo;
namespace {
template class bar<int>;
}
int main()
{
return 0;
}
त्रुटि के साथ
:
namespace_test.cpp:11: error: explicit instantiation of 'class bar<int>' in namespace '<unnamed>' (which does not enclose namespace 'foo')
जो दिलचस्प है क्योंकि गुमनाम नाम स्थान सिर्फ लिंकेज को निर्दिष्ट किया जाना चाहिए, नहीं सच में एक नाम स्थान के रूप में कार्य है, और ग्लोबल नेमस्पेस निश्चित रूप से foo संलग्न करता है, क्योंकि यह प्रत्येक नेमस्पेस को संलग्न करता है। लेकिन फिर भी यह काम नहीं करता !:
template<class T>
class bar {};
using namespace foo;
namespace {
template class bar<int>;
}
int main()
{
return 0;
}
बस के बजाय वैश्विक नामस्थान लिस्टिंग एक ही त्रुटि के साथ विफल कौन सा,:
namespace_test.cpp:11: error: explicit instantiation of 'class bar<int>' in namespace '<unnamed>' (which does not enclose namespace '::')
:/
जीसीसी का कौन सा संस्करण - या कौन सा कंपाइलर विकल्प - या कौन सा मंच? मैंने मैकोज़ एक्स पर जी ++ 4.0.1 के साथ पहले नमूने की कोशिश की और बिना -वॉल और यह शिकायत या चेतावनी के बिना संकलित किया गया। सोलारिस पर –
जीसीसी 4.2। –