Поместите их в специальное пространство имен или назовите их специально, в сочетании с соглашением проекта о том, что такие вещи не являются общедоступными:
namespace foo {
namespace detail { // as in "implementation details"
inline int answer() { return 42; }
const int perfect = 28;
}
std::string _question(); // not part of foo's "public interface" by convention
int this_is_public() {
using namespace detail; // now don't have to prefix detail::
return answer() + perfect + _question().length();
}
}
Любой, кто использует имена, задокументированные как непубличные, обойдет любую «защиту»Вы пытаетесь;что подчеркивает реальную проблему: документирование того, что является частью общедоступного интерфейса и на которое можно положиться.
Безымянные пространства имен решают другую проблему: получение имен, уникальных для конкретного TU.Они здесь не помогут.