Declaring names in appropriate namespaces reduces the number of names found during lookup, decreasing the risk of name clash and of surprising name lookup.
This rule raises an issue when a name in the global namespace has external linkage and therefore can be accessed from outside a particular translation unit.
Some names have to be declared in the global namespace, and are excluded from this rule:
In addition, no issue is raised for function definitions because they can only be accessed from different translation units through a forward declaration that will be flagged.