7.9 Ассоциация именных пространств
Внимание: Семантика этого расширения эквивалентна встроенным именованным пространствам C++ 2011. Пользователи должны использовать встроенные именованные пространства вместо этого расширения, так как оно будет удалено в будущих версиях G++.
Директива using с __attribute ((strong)) сильнее обычной директивы using двумя способами:
- Шаблоны из используемого именованного пространства могут быть специализированы и явно проинициализированы так, как будто они являются членами используемого именованного пространства.
- Используемое именованное пространство рассматривается как связанное именованное пространство всех шаблонов в используемом именованном пространстве для целей поиска имени, зависящего от аргументов.
Используемое именованное пространство должно быть вложенным в используемое именованное пространство, чтобы правильная работа обычного безусловного поиска.
Это полезно для прозрачного составления именованного пространства из именованных пространств реализации. Например:
namespace std {
namespace debug {
template <class T> struct A { };
}
using namespace debug __attribute ((__strong__));
template <> struct A<int> { }; // OK to specialize
template <class T> void f (A<T>);
}
int main()
{
f (std::A<float>()); // lookup finds std::f
f (std::A<int>());
}
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Namespace-Association.html