Вопрос по c++ – Почему функции / объекты внутри анонимного пространства имен имеют внешнюю связь?
=================================================================================================

Почему символы (функции и переменные), которые определены в анонимном пространстве имен, не имеют внутренней связи, как со статическим ключевым словом? Если функция не видна / недоступна снаружи, какова причина наличия внешней связи?

В C ++ 03 имена с внутренней связью было запрещено использовать в качестве аргументов шаблона [*]. Таким образом, имена большинства вещей в безымянных пространствах имен имеют внешнюю связь, позволяющую использовать их с шаблонами. Вы можете явно дать имя внутренней связи в безымянном пространстве имен, объявив ее`static`так же, как в именованном или глобальном пространстве имен.

Обе вещи изменились в C ++ 11 - имена в безымянных пространствах имен по умолчанию имеют внутреннюю связь (3.5 / 4), и имена с внутренней связью могут использоваться в качестве аргументов шаблона.

[*] для типов он должен иметь внешнюю связь. Для объектов и функций он должен иметь внешнюю связь, если его*address* используется в качестве аргумента шаблона, хотя, например, можно использовать в качестве аргумента шаблона*value* константного целого числа с внутренней связью.