2009-11-06 9 views

Respuesta

9

Bjarne's C++0x FAQ dice:

__cplusplus

En C++ 0x la macro __cplusplus se establecerá en un valor que difiere de (es mayor que) la corriente 199711L.

+2

Pero la macro '__cplusplus' no se debe establecer en' 199711L' para cualquier compilador que no implemente el estándar * full * C++ 98. – dalle

14

para C++ 03 según 16.8/1 (Prede fi nombres de macro NED):

El nombre __cplusplus se define con el valor 199711L al compilar una unidad de traducción C++.

Para C++ 0x proyectos de n2857 de acuerdo a 16,8/1 (Prede fi nombres de macro NED):

El nombre __cplusplus se define con el valor [TBD] al compilar una unidad de traducción C++.

+0

Es razonable esperar que este sea un número> '200911L' pero' '201012L' – MSalters

+0

No #defines para funcionalidad específica? –

+0

La definición de funcionalidad específica podría definirse mediante la implementación. El estándar no tiene tales definiciones. –

2

La especificación oficial incluye un valor para la macro preprocesador __cplusplus, pero, como otros han señalado, esto sugiere que todo en la especificación se implementa. Más al punto, ningún compilador actual (que yo sepa) establece el valor apropiado. Las especificaciones son buenas y buenas, pero los bits completamente no implementados de cualquier especificación deben considerarse tentativos; la intersección de la especificación y el amplio soporte es el verdadero "estándar".

Una pregunta relacionada es "¿cómo puedo saber si al menos alguna compatibilidad con C++ 0x está habilitada?", P. con el -std=c++0x interruptor del compilador. La respuesta a esa pregunta es específica del compilador y está sujeta a cambios, pero tanto GCC 4.6 como Clang 2.1 establecen el macro del preprocesador __GXX_EXPERIMENTAL_CXX0X__ (y le dan el valor 1) cuando se habilita su compatibilidad parcial con C++ 0x.

Cuestiones relacionadas