Иногда я нахожу код как следующий (фактически некоторые мастера классов создают такой код):
// 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. Поскольку все компиляторы я пробовал поделиться этой точкой зрения, они, вероятно, правы, но где в стандарте это мнение поддержано?