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-5.5.0/gcc/Namespace-Association.html