C++ standard 3.4.1:
.4:
Un nom utilisé dans la portée globale, en dehors de toute fonction, de classe ou de
l'utilisateur déclaré espace de noms, doit être déclarée avant son utilisation dans le mondial
la portée.
C'est pourquoi les variables globales et les fonctions ne peuvent pas être utilisés avant d'une même déclaration.
.5:
Un nom utilisé dans un utilisateur déclaré espace de noms en dehors de la définition de
toute classe ou de fonction doit être déclarée avant son utilisation dans l'
espace de noms ou avant son utilisation dans un espace de noms enfermant son espace de noms.
même chose juste écrit à nouveau que l'.4 paragraphe explictely restreint son disant "global", ce paragraphe dit maintenant "par la voie, de son vrai aussi dans namespeces les gens..."
.7:
Un nom utilisé dans la définition d'une classe X en dehors d'un membre
corps de la fonction ou de la classe imbriquée definition29 doit être déclaré dans l'une des
l'une des manières suivantes: - avant son utilisation dans la classe X ou être membre d'un
de la classe de base de X (10.2), ou - si X est une classe imbriquée de la classe Y (9.7),
avant la définition de X dans Y, ou est membre d'une classe de base
de Y (cette recherche s'applique tour à tour, Y s 'enfermant les classes, à partir
avec le plus profond classe englobante),30 ou - si X est une classe locale
(9.8) ou est une classe imbriquée d'un local de classe, avant la définition de
la classe de X dans un bloc englobant de la définition de la classe X, ou - si X est un
membre de l'espace de noms de N, ou est une classe imbriquée d'une classe qui est un
membre de la N, ou dans un local de classe ou d'une classe imbriquée à l'intérieur d'un local
la classe d'une fonction qui est un membre de la N, avant la définition de
la classe de X dans l'espace de noms N ou dans l'un de N, s 'enfermant les espaces de noms.
Je pense que ce qui parle de tout le code qui ne se tient pas dans la cpu de code exécuté (par exemple déclarative code).
et enfin la partie la plus intéressante:
3.3.7 portée de Classe [basic.scope.class]
1 Les règles suivantes décrivent la portée de noms déclarés dans les classes.
1) La portée potentielle d'un
nom déclaré dans une classe se compose non seulement de la région déclarative
à la suite du nom du point de déclaration, mais aussi à l'ensemble de la fonction
corps, corset ou égal initialiseurs de non-membres de données statiques, et
les arguments par défaut dans la classe (y compris dans les
les classes).
2) Un nom N utilisé dans une classe S se réfèrent à la même
déclaration dans son contexte et à la ré-évalué dans le
la portée de S. Aucun diagnostic n'est requis pour une infraction à cette règle.
3)
Si la réorganisation des déclarations de membre dans une classe donne une alternative valable
programme en vertu de (1) et (2), le programme est mal formé, pas de diagnostic est
nécessaire.
en particulier, par le dernier point qu'ils utilisent d'une manière négative à définir que "aucune commande n'est possible", parce que si la réorganisation des changerait de recherche puis il y a un problème. ses négative façon de dire "vous pouvez réorganiser tout et son ok, il ne marche pas changer quoi que ce soit".
effectivement en disant, dans une classe, la déclaration est recherchée dans les deux phases de la compilation de la mode.