Dann wird sich derjenige aber auch über eine Menge anderer Dinge wundern.
Das lokalere Namen globalere überschreiben ist einfach so und hat erstmal nichts mit Namensräumen zu tun. Ansich versucht man ja alles so lokal wie möglich zu halten, und wer in einer solche Funktion den Überblick verloren hat, dass er a noch einmal neu definiert hat, der hat halt schlecht programmiert.
Ich bin grundsätzlich für using, zumindest in Source Dateien.. Ohne das, hat man durch die :: nur zusätzliche Tipparbeit und im Gegensatz zu einfachen Präfixen nur sehr wenig gewonnen. Eine einzelne Sourcedatei ist meist lokal genug, dass keine Namenskonflikte auftreten, und selbst wenn, kann man ja den Namespace imemr noch explizit davor schreiben. Ging mir zum Beispiel mal so, als ich stl und ticpp benutzt habe, die halt beide eine Exception Klasse haben.
In Header muss man natürlich aufpassen. Gerade in Bibliotheken, sollte man es fast immer sein lassen. Aber wenn man in seinem Spiel konsequent STL-Container und ähnliches benutzt, dann schadet es echt nicht, in den Headern, die nur von anderen Spielheadern eingebunden werden zum Beispiel mal ein using std oder boost zu schreiben. So Häufig sind Namenskonflikte jetzt auch nicht, und wenn man doch einen hat, merkt man es in der Regel direkt.
Using gehört zum Namespace Konzept fest dazu und das ist auch gut so. Es ist einfach ein weitere Sprachmittel, man muss eben wissen, wofür es gut ist, und wo man aufpassen muss. Das ist das selbe, wie mit globalen Objekten, die sind auch nicht per se böse, nur halt oft nicht der beste Weg. Aber cout ist auch ein globales Objekt und das ist auch gut so. Man kann natürlich Anfangen und alles durch sinnlose Singletons kapseln, dann hat man kein globales Objekt mehr, aber man hat keinen der Nachteile von globalen Objekten beseitigt und die Sache nur unnötig kompliziert gemacht.
Ein using ist für Anfänger meiner Meinung nach gar nicht verkehrt. C++ ist eben eine komplexe Sprache und egal wie man es dreht oder wendet, zumindest ein wenig muss man eben über namespaces gelesen haben. Früher oder später kennt man dann auch die Details und vorher hat man keine so großen Projekte, dass direkt zig Namenskollisionen auftauchen werden.
Namespaces (inklusiv using) sind ein mächtiges Werkzeug, und mit Macht muss man verantwortungsvoll umgehen. Irgendwelche pauschalen Regeln aufzustellen, ist für Anfänger evtl. eien Orientierung, aber man sollte diese Regeln vergessen, sobald man den Sinn dahinter verstanden hat und ab dann das tun, was in der jeweiligen Situation angebracht ist.