Ежедневный бит (е) C ++ # 169, инструмент C ++ 11 для управления связыванием символов: анонимные пространства имен.

Анонимные (безымянные) пространства имен — отличный инструмент C++11 для управления связыванием символов.

Любые символы внутри безымянного пространства имен будут иметь внутреннюю связь, т. е. символы видны только единице перевода.

// unit.h
namespace MyLib {
    void function();
}

// unit.cc
namespace { // Unnamed namespace
    void internal_function() {}
}

namespace MyLib {
    void function() { internal_function(); } // OK, visible inside unit
}

void other_function() {}

// main.cc
int main() {
    MyLib::function();  // OK, accesible through header

    void other_function(); // manual declaration
    other_function();      // OK, external linkage

    void internal_function(); // manual declaration
    internal_function();      // Linker error, symbol not visible
}

Откройте пример в Compiler Explorer.