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.
Pero la macro '__cplusplus' no se debe establecer en' 199711L' para cualquier compilador que no implemente el estándar * full * C++ 98. – dalle