2010-09-09 11 views
4

A recent thread sur SO a déclenché ce.Anonyme Espace de noms

Un espace de noms anonyme est considéré comme équivalent à

namespace unique { /* empty body */ } 
    using namespace unique; 
    namespace unique { namespace-body } 

Je ne me souviens la raison exacte pour laquelle il ne correspond pas à

namespace unique { namespace-body } 
    using namespace unique; 

essayé également la recherche (y compris Google), mais en vain. S'il vous plaît partager toute information que vous avez à ce sujet.

+4

Par ailleurs, le terme technique est « espace de noms sans nom ». – GManNickG

Répondre

4

La spécification qui existe maintenant a été introduite en 1995 dans N0783 pour corriger un cas de coin. Pour citer ce document (page 9):

Le WP définit la sémantique d'un espace de noms sans nom comme équivalent à:

namespace UNIQUE { 
    // namespace body 
} 
using namespace UNIQUE; 

Ceci est incorrect car il rend le code dans un espace de noms sans nom dépendant que le code se trouve dans un espace de noms d'origine ou dans une extension d'espace de noms.

namespace {} // If you remove this line, the 
      // use of ::f below is invalid 

namespace { 
    void f() 
    { 
     using ::f; 
    } 
} 

Le PPF devrait être modifié pour définir un espace de noms sans nom comme équivalent à:

namespace UNIQUE {} 
using namespace UNIQUE; 
namespace UNIQUE { 
    // namespace body 
} 
+0

En fait, je ne comprends pas complètement. Deos cela signifie que l'extrait de code indiqué doit être bien formé dans la norme actuelle? – Chubsdad

+0

Oui - 'using :: f' suit le' using namespace UNIQUE'. Par conséquent 'UNIQUE :: f' est injecté dans l'espace de noms global au point où le code fait référence à' :: f' – MSalters