C++ uygulamasında, sınıfınızı ve işlev tanımlarınızı anonim bir ad alanı içinde sarmalayarak iç bağlantıyı belirtirsiniz. Ayrıca, şablonları açıkça ortaya çıkarabilir, ancak şablonların açık örneklerine uyan standartların aynı ad alanında olması gerekir. AFAICT bu derleme, ama GCC üzerinde başarısız: hata ileAnonim ad alanı tüm ad alanlarını kapsıyor mu?
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')
anonim ad sadece gerçekten bir ad olarak işleyen, bağlantı tasarımı olmalıdır çünkü ilginçtir ve Küresel ad alanı, her ad alanını kapladığı için kesinlikle foo'yu kapsamaktadır. Ama bu bile çalışmıyor !:
template<class T>
class bar {};
using namespace foo;
namespace {
template class bar<int>;
}
int main()
{
return 0;
}
sadece yerine küresel ad listeleyen aynı hata ile başarısız Hangi:
namespace_test.cpp:11: error: explicit instantiation of 'class bar<int>' in namespace '<unnamed>' (which does not enclose namespace '::')
:/
GCC'nin hangi sürümü - hangi derleyici seçenekleri - veya hangi platform? İlk örneği G ++ 4.0.1 ile MacOS X'te ve -Wall olmadan çalıştı ve şikayet veya uyarı olmadan derlendi. Solaris üzerinde –
GCC 4.2. –