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?