Например, если у меня есть заголовок с некоторыми объявлениями:
"Заголовок.hpp"
extern int SomeData;
int SomeFunc();
И его реализация (в которой я объявляю все функции и глобальные переменные в безымянном пространстве имен, чтобы избежать проблем с компоновкой):
"Заголовок.cpp"
#include "Header.hpp"
inline namespace
{
const int SomeLocalFileData = 9;
struct MyLocalStructure;
int SomeLocalFunction(MyLocalStructure *);
int ::SomeData(SomeLocalFileData);
int ::SomeFunc()
{
return SomeLocalFunction(nullptr);
}
}
Приведенный выше код завершится ошибкой со следующими ошибками (с использованием компилятора gcc):
ошибка: объявление «SomeData» не находится в пространстве имен, окружающем «::» int :: SomeData (SomeLocalFileData);
ошибка: объявление 'int SomeFunc()' не в пространстве имен, окружающем '::' int :: SomeFunc()
Итак, в любом случае я могу объявить все свои локальные файловые символы в анонимном пространстве имен, чтобы избежать проблем с привязкой, но в то же время иметь возможность определять мою функцию и экспорт данных.
SomeData
иSomeFunc
? Находясь в одной единице перевода, они должны иметь доступ к вашему локальному определению в анонимном пространстве имен. - person SleuthEye   schedule 30.11.2014