Могут ли члены класса быть определены вне пространства имен, в котором они объявлены?

Иногда я нахожу код, подобный следующему (на самом деле некоторые мастера классов создают такой код):

// 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, Поскольку все компиляторы, которые я пытался использовать, разделяют эту точку зрения, они, вероятно, правы, но где в стандарте это мнение подкреплено?

Ответы на вопрос(1)

Ваш ответ на вопрос