2009-11-06 5 views

Répondre

9

Bjarne's C++0x FAQ dit:

__cplusplus

En C++ 0x la __cplusplus macro sera réglé sur une valeur différente de (est supérieur à) la 199711L actuelle.

+2

Mais la macro '__cplusplus' ne doit pas être définie sur' 199711L' pour tout compilateur qui n'implémente pas la norme * full * C++ 98. – dalle

14

Pour 03 C++ selon 16.8/1 (fi Prede nies noms de macro):

Le nom __cplusplus est Définie la valeur 199711L lors de la compilation d'une unité de traduction C++.

Pour C++ 0x projet n2857 selon 16.8/1 (fi Prede nies noms de macro):

Le nom __cplusplus est défini à la valeur [fonct] lors de la compilation d'une unité de traduction C++.

+0

Il est raisonnable de s'attendre à ce que ce soit un nombre> '200911L' mais <' 201012L' – MSalters

+0

Non #defines pour une fonctionnalité spécifique? –

+0

Définition des fonctionnalités spécifiques pouvant être définies par implémentation. La norme n'a pas de telles définitions. –

2

La spécification officielle comprend une valeur pour la __cplusplus macro préprocesseur, mais comme d'autres l'ont souligné, cela suggère que tout dans la spécification est mise en œuvre. Plus précisément, aucun compilateur actuel (que je connais) ne définit la valeur appropriée. Les spécifications sont bonnes et bonnes, mais les parties complètement non implémentées de n'importe quelle spécification devraient être considérées comme provisoires; l'intersection de la spécification et du support large est la vraie "norme".

Une question connexe est "comment puis-je savoir si au moins un support C++ 0x est activé?", Par ex. avec le commutateur du compilateur -std=c++0x. La réponse à cette question est spécifique au compilateur et peut être modifiée, mais GCC 4.6 et Clang 2.1 définissent la macro __GXX_EXPERIMENTAL_CXX0X__ du préprocesseur (et lui attribuent la valeur 1) lorsque leur support C++ 0x partiel est activé.

Questions connexes