2017-03-02 2 views
1

Si un espace de noms est défini inline, est-il nécessaire de déclarer également les espaces de noms d'extension inline? En d'autres termes, est-il permis de déclarer un espace de noms en ligne une seule fois et d'omettre le qualificatif dans les déclarations d'extension?Un espace de noms en ligne doit-il toujours être qualifié en tant que tel?

+0

Ceci est également demandé [ici] (http://stackoverflow.com/questions/11016220/what-are-inline-namespaces-for), mais pas de réponse –

Répondre

0

J'ai eu l'occasion de demander au meilleur conseiller - compilateur (g ++ 4.9.2) :)

Alors que j'ai trouvé:

Il est non nécessaire de se qualifier namespces être en ligne dans définitions d'extension. Le type de l'espace de noms semble être fixé dans la déclaration de définition (= le premier que le compilateur voit). Les qualifications suivantes sont simplement ignorées. Ainsi, si quelqu'un tente de faire en sorte que l'espace de noms soit aligné dans une définition d'extension, le compilateur ne donnera aucun avertissement spécial, il se plaindra simplement des déclarations de classe/fonction manquantes.

Cependant, cela dépend de l'application de qualifier les espaces de noms d'extension. Dans mon cas ce n'est pas nécessaire car il y a clairement inclusion de la hiérarchie assurée par héritage. Si ce n'est pas le cas, il peut être encore une bonne idée de qualifier les espaces de noms en ligne dans les fichiers d'en-tête car on ne sait pas quelle déclaration sera la définition.

+0

Ceci est proche de ce que dit la norme, mais pas exacte ; voir [\ [namespace.def \]/5] (http://eel.is/c++draft/namespace.def#5). – bogdan