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