Nota: esta pregunta es sobre name space
, no namespace
.
El estándar C ++ tiene algunas referencias name space
, pero no veo la definición de esto. Los estándares dicen que las etiquetas y las macros están en diferentes espacios de nombres. Todas las demás referencias name space
están en la sección de compatibilidad C / C ++, como esta ( borrador actual ):
Esta es una de las pocas incompatibilidades entre C y C ++ que se puede atribuir a la nueva definición de espacio de nombres de C ++ en la que un nombre se puede declarar como un tipo y como un no tipo en un solo ámbito, lo que hace que el nombre sin tipo oculte el escriba el nombre y requiera que las palabras clave class, struct, union o enum se usen para referirse al nombre del tipo. Esta nueva definición de espacio de nombres proporciona importantes ventajas de notación a los programadores de C ++ y ayuda a que el uso de los tipos definidos por el usuario sea lo más similar posible al uso de los tipos fundamentales.
¿Cuál es esta nueva definición de espacio de nombres ? ¿Dónde puedo encontrarlo en el estándar? ¿Cuáles son las reglas exactas? Las reglas parecen ser más complicadas que los "tipos no ocultos". Como, esto no compila:
typedef int Foo; // Foo is a type
void Foo(); // not a type, but compile error, instead of hiding
Pero esto hace:
struct Foo { }; // Foo is a type as well
void Foo(); // This hides the type Foo. "struct Foo" refers to the type
Y esto tampoco compila:
struct Foo { }; // Type
namespace Foo { } // Non-type, but compiler error instead of hiding
[stmt.label]/1
y otro para macros [cpp]/8
.