Spec-Zone.ru › GCC 4

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

Spec-Zone.ru

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