Иногда я нахожу код как следующий (фактически некоторые мастера классов создают такой код):
// C.h
namespace NS {
class C {
void f();
};
}
и в файле реализации:
// C.cpp
#include "C.h"
using namespace NS;
void C::f() {
//...
}
Все компиляторы, которые я пробовал, принимают такой код (gcc, clang, msvc, compileonline.com). Что заставляет меня чувствовать себя некомфортно, это using namespace NS;
. С моей точки зрения, C::f()
живет в глобальном пространстве имен в среде, которая имеет неквалифицированный доступ к объектам, живущим в пространстве имен NS. Но в мнении компилятора void C::f()
живет namespace NS
. Поскольку все компиляторы я пробовал поделиться этой точкой зрения, они, вероятно, правы, но где в стандарте это мнение поддержано?