Nested unnamed namespace?

Probably no real difference for your purposes. It makes a difference to where in your cpp file privateFunction is visible. If you add void barFunc() { privateFunction(); } to the end of both files, then Foo2.cpp compiles and Foo1.cpp doesn't.

Normally you wouldn't define external symbols from lots of different namespaces in the same cpp file, so the difference won't come up.


Unnamed namespace could be considered as a normal namespace with unique name which you do not know. According to C++ Standard 7.3.1.1:

An unnamed-namespace-definition behaves as if it were replaced by

  namespace unique { /* empty body */ }
  using namespace unique;
  namespace unique { namespace-body }

where all occurrences of unique in a translation unit are replaced by the same identifier and this identifier differs from all other identifiers in the entire program.

There are no additional issues.