Как правильно использовать anonymous namespace?
Если хочется полностью исключить возможность использования приватных выражений, то использовать стоит не пространства имен, а класс с вложенными типами под соответствующими секциями.
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];
	};
};
Такое делают при помощи PImpl, если есть реальная необходимость скрыть детали реализации. Решает проблему "incomplete type".