Если хочется полностью исключить возможность использования приватных выражений, то использовать стоит не пространства имен, а класс с вложенными типами под соответствующими секциями.
class a final
{
private:
class ex
{
int f = 0;
};
static void foo() { std::cout << 'f' << std::endl; };
public:
class F
{
public:
F() { foo(); };
private:
ex m_exes[4];
};
};