Os membros da classe podem ser definidos fora do namespace no qual são declarados?

Às vezes, encontro código como o seguinte (na verdade, alguns assistentes de classe criam esse código):

// C.h
namespace NS {

class C {
    void f();
};

}

e no arquivo de implementação:

// C.cpp
#include "C.h"

using namespace NS;
void C::f() {
  //...
}

Todos os compiladores que tentei aceitar esse tipo de código (gcc, clang, msvc, compileonline.com). O que me faz sentir desconfortável é ausing namespace NS;. Do meu ponto de vistaC::f() vive no espaço para nome global em um ambiente que possui acesso não qualificado a objetos que vivem no espaço para nome NS. Mas na opinião do compiladorvoid C::f() mora emnamespace NS. Como todos os compiladores, tentei compartilhar esse ponto de vista, eles provavelmente estão certos, mas onde no padrão essa opinião é apoiada?

questionAnswers(1)

yourAnswerToTheQuestion