Nota: esta questão é sobre name space, não namespace.
O padrão C ++ tem algumas referências a name space, mas não vejo a definição disso. Os padrões dizem que rótulos e macros estão em diferentes espaços de nome. Todas as outras referências name spaceestão na seção de compatibilidade com C / C ++, como esta ( rascunho atual ):
Essa é uma das poucas incompatibilidades entre C e C ++ que podem ser atribuídas à nova definição de espaço de nome C ++, na qual um nome pode ser declarado como um tipo e um não-tipo em um único escopo, fazendo com que o nome não-tipo oculte o nome do tipo e exigindo que as palavras-chave classe, estrutura, união ou enum sejam usadas para se referir ao nome do tipo. Essa nova definição de espaço de nome fornece conveniências notacionais importantes aos programadores de C ++ e ajuda a tornar o uso dos tipos definidos pelo usuário o mais semelhante possível ao uso de tipos fundamentais.
Qual é essa nova definição de espaço para nome ? Onde posso encontrá-lo no padrão? Quais são as regras exatas? As regras parecem ser mais complicadas do que "tipos não ocultos". Como, isso não compila:
typedef int Foo; // Foo is a type
void Foo(); // not a type, but compile error, instead of hiding
Mas isso faz:
struct Foo { }; // Foo is a type as well
void Foo(); // This hides the type Foo. "struct Foo" refers to the type
E isso também não compila:
struct Foo { }; // Type
namespace Foo { } // Non-type, but compiler error instead of hiding
[stmt.label]/1e outro para macros [cpp]/8.