A.6. Distinction de phase et métaprogrammation
Ces quatre codes protègent l'invariant énoncé au chapitre 1 (§1.4) : le comportement observable d'un programme ne dépend jamais de ce qui appartient à la phase de compilation. C'est cet invariant qui autorise la Phase 8 à purger les blocs de spécification sans changer le programme ; le violer rendrait l'effacement incorrect, et non pas seulement imprudent.
Codes protégeant la distinction de phase et l'hygiène des macros
Code | Déclencheur et correction |
|---|---|
|
Projection implicite |
|
Éliminateur discriminant à l'exécution sur un argument de la phase de compilation — |
|
Macro dont l'expansion introduit une liaison capturable par le site d'appel sans l'avoir déclarée. L'anaphore n'est pas interdite, elle doit être visible : annoter la macro de |
|
Macro annotée |