You can overload functions across namespaces. For example:
// Original X.h: f(int); // Original Y.h: f(char); // Original program.c: #include "X.h" #include "Y.h" void z() { f('a'); // calls f(char) from Y.h }
Namespaces can be introduced to the previous example without drastically changing the source code.
// New X.h: namespace X { f(int); } // New Y.h: namespace Y { f(char); } // New program.c: #include "X.h" #include "Y.h" using namespace X; using namespace Y; void z() { f('a'); // calls f() from Y.h }
In program.c, function void z() calls function f(), which is a member of namespace Y. If you place the using directives in the header files, the source code for program.c remains unchanged.
Related information