De las preguntas frecuentes de Bjarne Stroustrup C ++ 0x :
__cplusplus
En C ++ 0x, la macro __cplusplus
se establecerá en un valor que difiera de (sea mayor que) el actual 199711L
.
Aunque esto no es tan útil como a uno le gustaría. gcc
(aparentemente durante casi 10 años) tenía este valor establecido en 1
, descartando un compilador principal, hasta que se corrigió cuando salió gcc 4.7.0 .
Estos son los estándares de C ++ y el valor que debería poder esperar en __cplusplus
:
- C ++ anterior a C ++ 98:
__cplusplus
es 1
.
- C ++ 98:
__cplusplus
es 199711L
.
- C ++ 98 + TR1: Esto se lee como C ++ 98 y no hay forma de verificar que yo sepa.
- C ++ 11:
__cplusplus
es 201103L
.
- C ++ 14:
__cplusplus
es 201402L
.
- C ++ 17:
__cplusplus
es 201703L
.
Si el compilador puede ser más antiguo gcc
, debemos recurrir a la piratería informática específica del compilador (mire una macro de versión, compárela con una tabla con características implementadas) o use Boost.Config (que proporciona macros relevantes ). La ventaja de esto es que realmente podemos elegir características específicas del nuevo estándar y escribir una solución si falta la característica. Esto a menudo se prefiere a una solución mayorista, ya que algunos compiladores afirmarán que implementan C ++ 11, pero solo ofrecen un subconjunto de las características.
El Stdcxx Wiki alberga una matriz completa para el soporte del compilador de las características de C ++ 0x (si se atreve a verificar las características usted mismo).
Desafortunadamente, una verificación más detallada de características (por ejemplo, funciones de biblioteca individuales como std::copy_if
) solo se puede realizar en el sistema de compilación de su aplicación (ejecute el código con la característica, verifique si se compiló y produjo resultados correctos: autoconf
es la herramienta de elección si toma esta ruta).