Nota: questa domanda riguarda name space
no namespace
.
Lo standard C ++ ha alcuni riferimenti a name space
, ma non vedo la definizione di questo. Gli standard affermano che le etichette e le macro si trovano in spazi dei nomi diversi. Tutti gli altri riferimenti a name space
sono nella sezione di compatibilità C / C ++, in questo modo ( bozza corrente ):
Questa è una delle poche incompatibilità tra C e C ++ che può essere attribuita alla nuova definizione dello spazio dei nomi C ++ in cui un nome può essere dichiarato come tipo e come non tipo in un singolo ambito facendo sì che il nome non tipo nasconda digitare il nome e richiedere l'utilizzo delle parole chiave class, struct, union o enum per fare riferimento al nome del tipo. Questa nuova definizione dello spazio dei nomi offre importanti vantaggi notazionali ai programmatori C ++ e aiuta a rendere l'uso dei tipi definiti dall'utente il più simile possibile all'uso dei tipi fondamentali.
Qual è la nuova definizione dello spazio dei nomi ? Dove posso trovarlo nello standard? Quali sono le regole esatte? Le regole sembrano essere più complicate rispetto ai "tipi non nascosti". Ad esempio, questo non viene compilato:
typedef int Foo; // Foo is a type
void Foo(); // not a type, but compile error, instead of hiding
Ma questo fa:
struct Foo { }; // Foo is a type as well
void Foo(); // This hides the type Foo. "struct Foo" refers to the type
E questo non si compila neanche:
struct Foo { }; // Type
namespace Foo { } // Non-type, but compiler error instead of hiding
[stmt.label]/1
e uno per le macro [cpp]/8
.