Caution: The semantics of this extension are equivalent to C++ 2011 inline namespaces. Users should use inline namespaces instead as this extension will be removed in future versions of G++.
A using-directive with __attribute ((strong))
is stronger than a normal using-directive in two ways:
The used namespace must be nested within the using namespace so that normal unqualified lookup works properly.
This is useful for composing a namespace transparently from implementation namespaces. For example:
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.4.0/gcc/Namespace-Association.html