Например, ако имам заглавка с някои декларации:
"Header.hpp"
extern int SomeData;
int SomeFunc();
И негова реализация (в която декларирам всички функции и глобални променливи в неназовано пространство от имена, за да избегна проблеми със свързването):
"Header.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