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