$NAMESPACE app::messages
namespace app
{
  namespace messages
  {
    ...
  } // end namespace -- messages
} // end namespace -- app

An empty $NAMESPACE means the global namespace. The last $NAMESPACE in the module wins.

A function generated MEMBER OF a class is defined inside this namespace, so C++ requires the class to be declared in it (or in a namespace nested in it).