Spec-Zone.ru › GCC 6

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API