Using namespace directives potentially cause ambiguity. For example, if there is a name in the global (unnamed) namespace that is the same as a name within namespace std, then any usage of that name will always be ambiguous after a "using namespace std" directive.
Once that ambiguity occurs, there are only two possible options to resolve it, since the effect of a "using namespace" directive can't be undone by any means except removing the directive.
The first approach to resolving such an ambiguity is to fully qualifying all names (i.e. prefixing all names with their namespace). That negates the point of the existing "using namespace" directive for all names where ambiguity has been introduced.
The second approach is to remove the "using namespace" directive, which then makes it necessary to ensure all names (except, optionally, those in the global namespace) are fully qualified.
Practically, for anything except the tiniest code samples, I find the effort of resolving such an ambiguity upon encountering it exceeds the effort of avoiding it in the first place (i.e. not employing any "using namespace" directives, and fully qualifying all names except - optionally - those that are local to a file or in the global namespace).
And since I generally write code with a view to maintaining it, using it in a larger system, or extending it ...... I find it better to simply avoid "using namespace" directives in real code. The only time I employ a "using namespace" directive is actually in code samples I post in forums.
I'm not fussed if people choose to employ a "using namespace" directive in their own code. They wear the impact. But a "using namespace" directive in a header file is a no-no, since it forces me to manage impacts whether I wish to or not. If I encounter a "using namespace" directive in a header file for a library, I do not use that library. Period.