Each time I’ve had to design a C++ application, I’ve come to wrestle myself with how to use namespaces. The best advice I got came from a page arguing about a specific feature of C++ namespaces, namely, using directives and declarations. In essence:
- Quoting: «namespaces are designed to resolve name clashes, not to prevent them»
- Never, ever, ever use using directives (using namespace std;) or using declarations (using std::cout;) inside an header file; use those only on cpp files, if you feel they’re useful
- inside header files, always fully qualify the names, using namespace alias (namespace s=std;) if suitable
The details are very well explained in the article.